1. 程式人生 > >Linux 命令使用筆記 (來自於鳥哥 經自己整理哈!)(連載中。。。)

Linux 命令使用筆記 (來自於鳥哥 經自己整理哈!)(連載中。。。)

                                                           Linux使用筆記
1.改變檔案擁有者chgrp 使用者名稱 檔名
   改變檔案群組    chgrp 群組名 檔名
   chown -R 使用者名稱:群組名 檔名    使用者名稱群組名一起變

2.改變檔案許可權 chmod 數字(01347)檔名

3. .sh批處理檔案
     .Z等 打包,壓縮檔案    
       
4./bin執行程式的資料夾
   /boot linux核心和啟動相關檔案的資料夾
   /dev 裝置檔案
   /etc 系統需要讀取的檔案的資料夾
         /etc/rc.d       開關機用的指令碼
         /etc/rc.d/init.c  所有服務預設的啟動指令碼檔案
         /etc/xinetd.d     啟動服務檔案
         /etc/X11        X-window有關的配置檔案
   /home 使用者根目錄
   /lib 編譯程式時的函式庫
   /lost+found 系統產生異常時放置一些遺失片段
   /mnt 軟碟機光碟機裝載點
   /proc 放置系統核心與執行程式所需的資訊
   /root 系統管理員的根目錄
   /sbin 放置系統常用的程式(系統管理員常用的)
   /tmp 放置使用者的臨時檔案
   /usr 系統資訊
          /usr/include 一些套件的標頭檔案
       /usr/lib 函式庫
       /usr/local 軟體及軟體升級
           /usr/share/doc 放置一些系統說明檔案的地方
           /usr/share/man 放置一些程式說明檔案的地方
           /usr/src 放置核心程式碼的預設目錄
           /usr/X11R6 X window system存放相關檔案的目錄
/var 所有服務的登入檔案或錯誤資訊檔案

5.路徑中的符號表示    . 代表當前層目錄      .. 代表上層目錄     ~ 代表自己的根目錄    ~user 代表到user這個人的根目錄
  cd 變換目錄    pwd 顯示當前目錄   mkdir 建立一個新目錄   rmdir  刪除一個空目錄    rm -rf 目錄名 刪除目錄下的所有東西並且不提示

6.echo 顯示 列印

7.環境變數PATH echo $PATH 顯示當前的PATH路徑
  加入路徑 PATH="$PATH":/root

8.ls 顯示檔名稱屬性     cp 複製檔案或目錄     rm 刪除檔案或目錄    mv 移動檔案或目錄
  --color=never(always/auto)顏色
  cp (-  d原封不動的複製 不管是不是連結檔案   r目錄複製     s做成連結檔案    u新檔案或沒有目標檔案才進行復制『用於備份』) 原始檔 目標檔案
  rm (-  f強制刪除      i提供使用者確認     r迴圈刪除 直到沒有東西為止) 檔名
  mv (-  u比原始檔比目標檔案還新的時候才執行)  可用於改名

9.cat 檔名 -n 顯示時 同時顯示行號  正向輸出檔案內容
  tac 檔名                      反向輸出檔案內容
  more 檔名    一頁一頁顯示檔案內容   (在別處也可以使用 然後一頁一頁看      例如:ls -al | more)
  less 檔名    可以前翻後翻 (/『word』 可以輸入字串進行關鍵字查詢)
  head -n 前幾行數 檔名
  tail -n 後幾行數 檔名
  nl 檔名 = cat -n
  od 檔名 顯示二進位制檔案內容

10.ln 連結檔案
    ln 檔名 目標檔案  硬連結
    ln -s  檔名 目標檔案 軟連結(類似於快捷方式)

11.umask (+ 數字) 不加數字為顯示預設檔案屬性 加為修改

12.chattr [+-=] [ASacdistu] [檔名 或 目錄名]
   + 增加屬性   - 減少屬性   = 設定屬性
   A 存取時間不能進行修改
   S 將資料同步寫入磁碟
   a 只能增加,不能刪除(root)
   c 自動壓縮和解壓縮
   d 當dump(備份)執行時,可使該檔案有備份功能
   i 無法對檔案進行修改
   (j 屬性寫入日誌)
   s 完全移出這個硬碟
   u 與s相反 取消刪除
   lsattr -[aR]  檢視檔案attr的屬性
   -a 顯示全部的檔案 包括隱藏檔案
   -R 顯示子目錄的資料

13.which 檔名     檢視可執行檔案的位置(按照PATH路徑查詢)
   whereis -[bmsu] 目錄名稱
   -b 只找二進位制檔案
   -m 只找在說明檔案manual路徑下的檔案
   -s 只找source原始檔
   -u 沒有說明文件的檔案
   locate 目錄名稱 找所有帶目錄名稱的檔案
   find 路徑 引數
      時間: -atime n   將n*24小時內被存取過的檔案列出來
            -ctime n   將n*24小時內被修改,新增的檔案或目錄列出來
            -mtime n   將n*24小時內被修改過的檔案列出來
            -newer file  把比file還新的檔案列出來
      使用名稱:   -gid n      尋找尋租ID為n的檔案
                 -group name 尋找群組名為name的檔案
                 -uid n      尋找擁有者ID為n的檔案
                 -user name  尋找檔名稱為name的檔案
                 -name file  尋找檔名為file的檔名稱(可以使用萬用字元)
                 -type type  尋找檔案屬性為type的檔案,type包含b,c,d,p,l,s

14.file 檔名    檢視文集屬性

15.SUID 的意思
# ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 29104 2006-12-20 04:35 /usr/bin/passwd

在原來x的位置有一個s屬性,這個就是所謂的SUID當一個檔案具有SUID時,同時others和群組都具有可執行權,那麼當others和群組執行該程式時,others和群組將擁有該檔案的owner許可權


# ls -l /usr/bin/passwd /etc/shadow
-rw-r----- 1 root root   929 2007-12-14 21:56 /etc/shadow
-rwsr-xr-x 1 root root 29104 2006-12-20 04:35 /usr/bin/passwd

一般使用者可以修改自己的密碼,那麼修改密碼一定和/etc/shadow檔案有關(可是一般使用者對/etc/shadow檔案並沒有寫許可權),怎麼回事呢? 使用者是如何修改/etc/shadow這個檔案的呢?
/usr/bin/passwd檔案具有SUID屬性,當一般使用者執行/usr/bin/passwd時,將具有root許可權,所以他們可以更改/etc/shadow的內容
由此可知,由於Set UID(SUID)的主要功能是在某個檔案執行期間具有檔案擁有者的許可權,因此,s可以代替x可執行屬性

由此可知SUID和SGID的問題所在,沒錯,就是太不安全瞭如果您有一個檔案具有root許可權,那麼當開啟SUID時,後果不堪設想因此,在變更一個檔案使之具有SUID或SGID時,必須特別小心

16.硬碟:磁頭 磁軌 磁柱 扇區:512b
   filesystem:
        主引導扇區
        塊
        superblock
        inode

17.df -[ikm]  檢視硬碟的總容量,已用容量和inode等
      -i 使用inode顯示結果
      -k 使用KBytes顯示結果
      -m 使用Mbytes顯示結果
   du -[abckms] (目錄名稱)-
      -a   列出所有檔案和目錄,預設值是列出目錄的值
      -b   列出的值以bytes輸出
      -c   最後求總total
      -k   列出的值以KB輸出
      -m   列出的值以MB輸出
      -s   只列出最後求的總值

18.fdisk 裝置名稱     硬碟分割槽工具
          fdisk -l 裝置名稱  直接列出該裝置的分割槽表
   mke2fs(make ext2 file system) 格式化
      mke2fs -b (block size) -i (inode size)   -b設定資料塊大小(1024 2048 4086)  -i設定inode值
      mke2fs -c 檢查磁碟錯誤
      mke2fs -L 設定扇區的label(表頭)
      mke2fs -j 建立ext3這個具有日誌管理系統功能的檔案格式
   e2label 更改表頭資料
      e2label 裝置名稱 表頭名
   mknod [device] [bcp] [Major] [Minor]
      b 設定節點為外部裝置文件
      c 設定節點為介面裝置 如 滑鼠
      p 建立FIFO管道

19.fsck -[Aar] 裝置名稱 檢查硬碟有沒有壞軌
      -A 依據/etc/fstab的內容 將所有裝置掃描一遍
      -a 自動修復檢查到問題扇區
      -r 一定讓使用者決定是否需要修復
   sync; sync 將記憶體中的資料回存在硬碟中

20.mkbootdisk --device /dev/fd0 'uname -r'   製作可引導軟盤
   fdformat 裝置名稱    格式化低階軟盤  (與mke2fs一起用)

21.mount -[ahlV]
     -a 依照/etc/fstab的內容裝載所有相關的硬碟
     -h 之列出mount相關的引數,並不裝載任何裝置
     -l 列出當前已經裝載的裝置,檔案系統名稱 與裝載點
     -V 列出mount版本資訊
   mount -t type /dev/hdxx /moutpoint將後面/dev/hdxx裝置以type的檔案格式裝載到/mountpoint這個點。(vfat msdos windows系統檔案格式  ext ext2 linux主要文式             iso9660  光碟機檔案格式)
   mount -o (rw 可擦寫    suid 允許硬碟配置檔案為SUID狀態    exec 允許該硬碟執行二進位制可執行檔案   auto 允許該硬碟使用-a引數設定   nouser 禁止非root使用者使用裝載功能
              async 允許該硬碟使用mount -a引數設定    defaults 同時有上面的屬性    nosuid 不許有SUID檔案屬性   ro 只讀屬性   remount 把系統已經裝載好的硬碟重新裝載)
   umount [-f] [device | mount_point]  解除安裝裝載     
      -f 強制

22.hdparm -[cdmXTt] 裝置名稱   對硬碟效能測試與應用
     -c 提供32位存取模式,支援的形式有 -c0:關閉32位存取模式   -c1:開啟    -c3:以較為特殊的sync模式開啟32位存取模式
     -d 是否啟動硬碟的DMA模式, 0為關閉  1為開啟
     -m 設定multiple sector I/O模式 通常為16
     -X 設定IDE/ATA模式的項 支援設定(-X34:開啟DMA mode 2 [ATA]         -x66:KAIQI ultra DMA mode 2 [ATA66])
     -T 測試快取區cache的存取效能
     -t 測試硬碟實際存取效能

23.Swap分割槽
      fdisk /dev/..  然後ID改為82  mkswap /dev/..[1-16]    格式化     用swapon /dev/..啟動  用swapoff 關閉
      dd指令建立swapfile檔案  用mkswap把它格式化為swap檔案   

24.alias 設定指令的別名    例子:alias la = 'ls -al'
     查詢時直接alias
     取消alias   用unalias

25.顯示變數 echo $變數名
   顯示主要變數  env
   顯示所有變數  set      echo $?   顯示前一個指令是否有錯誤  無錯誤為0
   export 變數  使變數動作
   unset  變數  取消變數
   單引號和雙引號的區別 :雙的裡面儲存特殊字元  單的變成一般字元
   export 可以在子程式中使用

26.history 顯示歷史指令
   !上一個指令     !number 第幾個指令    !command 指令開頭幾個字母(最近一次的)
   history -c 清楚歷史記錄     history -r 檔名  將歷史指令存到指定的檔案中
27.萬用字元
     * 萬用字元 代表任意字元
     ? 萬用字元 代表一個字元
     # 註釋
     \ 跳轉符號 將特殊字元或萬用字元還原成一般字元
     | 分隔兩個管線命令的界定
     ; 連續性命令的界定(注意,與管線命令不同)
     ~ 使用者的根目錄
     $ 變數前要加的變數值
     & 將指令程式設計在背景下工作
     ! 非
     / 路徑分隔符號
     > >> 輸出導向,分別為  取代   累加
     ' 單引號,不具有變數置換功能
     " 雙引號,具有變數置換功能
     ‘ ’兩個 ‘ 中間為可以先執行的指令
     () 中間為子shell的起始與結束
     [] 中間為字元組合
     {} 中間為命令區塊組合
     組合鍵 執行結果
     Ctrl + C 終止當前命令
     Ctrl + D 輸入結束EOF
     Ctrl + M = Enter
     Ctrl + S 暫停螢幕的輸出
     Ctrl + Q 恢復螢幕的輸出
     Ctrl + U 在提示符下,整行命令刪除
     Ctrl + Z 暫停當前命令
     連續輸入命令   ;  && ||

28.  ./的意思是當前目錄下執行檔案 .為當前目錄   ..為上一層目錄

29.  重定向   
         > 標準輸出  ( >> 累加輸出 不刪除原來的資料)(1> 正確的    2>錯誤的資料)
         < 標準輸入  
         
30.cut -d "分隔字元" [-cf] fields
    -d:後面接的是分隔字元,預設為空格符
    -c:後面接的是第幾個字元
    -f:後面接的是第幾個區塊
    例子:cat /etc/passed | cut -d ";" -f 1
    sort [-t 分隔符] [(+起始)(-結束)] [-nru]
    -t 分隔符:使用分隔符隔開不同的區塊,預設是tab
    +start -end:由第start區塊排序到end區塊
    -n:使用純數字排序(否則會以字母方式排序)
    -r:反向排序
    -u:相同出現的一行,只列出一個
     wc [-lmw]
    -l:多少行
    -m:多少字元
    -w:多少子

     uniq 刪除重複

tee 檔名 傳命令並且寫入檔案中
     tr [-ds] SET1
    -d :刪除SET1這個字串
    -s :取代重複的字元
     split -[bl] 輸入檔案 輸出檔案前導字元       用來分割檔案
    -b:以檔案size來分
    -l:以行數來分

31.     *.Z   compress程式壓縮的檔案
    *.bz2 bzip2程式壓縮的檔案
    *.gz gzip程式壓縮的檔案
    *.tar tar程式打包的程式,沒有經過壓縮
    *.tar.gz tar程式打包的檔案,且經過gzip壓縮

    compress [-d] filename     壓縮或者解壓縮
      -d:解壓縮引數 = umcompress

    bzip2:壓縮解壓縮   bzcat讀取壓縮檔案內容
        -d:解壓縮
        -z:壓縮
     [-d#] filename  壓縮解壓縮
    zcat filename.gz   讀取解壓縮檔案
       -d :解壓縮引數
       -# :壓縮等級   1最不好 9最好  6預設
    tar [-zxcvfpP] filename
    tar 'yyyy/mm/dd' /path -zcvf target.tar.gz(壓縮檔案) source(原來的檔案)
        -z:是否具有gzip
        -x:揭開一個壓縮檔案
        -t:檢視tarfile裡面的檔案
        -c:建立一個壓縮檔案
        -v:壓縮過程中顯示檔案
        -f:使用檔名
        -p:使用原檔案的原有屬性
        -P:可以使用絕對路徑
        -N:比後面接的日期(yyyy/mm/dd)還要新的檔案才會被打包
        --exclude FILE:在壓縮過程中,不要將FILE打包    
    cpio -covB > [file | device]    備份
    cpio -icduv < [file | device]   還原
        -o:將資料複製輸出到檔案或裝置上
        -i:將資料自檔案或裝置複製出到系統中
        -t:檢視cpio建立的檔案或裝置的內容
        -c:以一種較新的便攜格式儲存
        -v:讓儲存過程中檔名稱可以顯示在螢幕上
        -B:讓預設的Blocks可以增至5120bytes,預設是512bytes,預設是512bytes
        -d:自動建立目錄,由於cpio的內容可能不在同一目錄內。
        -u:自動用較新的檔案覆蓋較久的檔案

32    grep 正規表示法
      grep “word” filename  在檔案中把有"word"一行的資訊顯示出來
      grep "*[a-d]*" filename 輸出含有a-d的行

33.    bash判斷執行的步驟:
        1.如果取到一個Enter符號(CR),就嘗試開始執行該指令
        2.指令間的空白被忽略
        3.一行太多可用\延伸到下一行
        4.#註釋
    執行檔案方法:
        1.改屬性  改成可執行檔案
        2.用sh執行
    declare [-afirx] 定義變數
        -a:定義為陣列(array)
        -f:定義為函式(function)
        -i:定義為整數(integer)
        -r:定義只讀
        -x:定義為通過環境輸出變數

    指令碼 $0:myscript 指令碼檔名
        $1:opt1  第一個附加引數
        $2......
        $3......

    指令碼邏輯判斷式與表示式
         1.  關於檔案與目錄的邏輯卷標
        -f  檢測檔案是否存在  (常用)
        -d  檢測目錄是否存在  (常用)
        -b  檢測是否為一個block檔案
        -c  檢測是否為一個character檔案
        -S  檢測是否為一個socket標籤檔案
        -L  檢測是否為一個符號連結檔案
        -e  檢測某個東西是否存在
         2.  關於程式的邏輯卷標
        -G  檢測是否由GID所執行的程式擁有
        -O  檢測是否由UID所執行的程式擁有
        -p檢測是否為程式間傳送資訊的name pipe或FIFO
         3.  關於檔案屬性的檢測
        -r檢測是否為可讀屬性
        -w緝拿冊是否為可寫入屬性
        -x檢測是否為執行屬性
        -s檢測是否為非空白檔案
        -u檢測是否具有SUID屬性
        -g檢測是否具有SGID屬性
        -k檢測是否具有sticky bit屬性
         4.  兩個檔案之間的判斷與比較  例子:test file1 -nt file2
        -nt 第一個檔案比第二個檔案新
        -ot 第一個檔案比第二個檔案舊
        -ef 第一個檔案與第二個檔案為同一個檔案
         5.  邏輯與(and)和或(or)
        && 邏輯與
        ||邏輯或
         6.運算子
        -eq =
        -ne !=
        -lt <
        -gt >
        -le <=
        -ge >=
        -a  and
        -o  or
        -z  空字串
        -n  非空字串

         7.條件判斷
        if [條件判斷1] && (||) [條件判斷2];then     if是起始,後面可以接若干個判斷式,使用&&或||判斷
        elif [條件判斷3] &&(||) [條件判斷4];then   第二段判斷,如果第一斷不符合要求就傳到此搜尋條件,執行第二段程式
        else 都不符合執行這段
        fi   結束

         8.case...esac
                  case 種類方式(string) in   開始階段  通常使用$1這種直接輸入型別
            種類方式1)
               程式執行段
                ;;     種類方式結束符號
            種類方式2)
               程式執行段
                ;;
            *)
               echo "Usage:{種類方式一 | 種類方式二}"    列出可以利用的引數值
               exit 1
          esac
        種類方式: 1 直接輸入:世界以“執行檔案 + string”  string可以寫成$1
             2 互動式:配合read

         9.迴圈
        for(;;)
        for variable in variable1 variable2
        while [ condition1 ] && { || } [ condition2 ]
        until [condition1 ] && { || } [ condition2 ]

        until:直到條件符合的時候才退出

        while:當條件符合時,繼續

       do 。。。。done 相當於函式體的括號

34.帳號管理:
    1 登入主機時 輸入帳號密碼後 linux會將該帳號對應的UID GID讀出來從etc/passwd   沒有則跳出
    2 然後核對密碼錶 etc/shadow中 找到對應的帳號和UID 然後核對密碼
        (備份時兩個一定要一起備份)
    檔案如果不是使用者擁有的 擁有名則變成數字
    
    etc/passwd檔案構造
        帳號名: 密碼(早期): UID(0系統管理員  1~500系統預留帳號  500~65535一般使用者使用): GID(etc/group)
                : 說明 : 根目錄(使用者預設的目錄 預設為 /home/yourIdName) : Shell (/bin/false 帳號無法登入)
    etc/shadow檔案構造
        帳號名: 密碼(加密後   密碼前面加個* 使用者無法登入) :上次改動日期(以1970年1月1日為1 且日期累加)
        :密碼不可變更天數 : 密碼需要重新變更天數 :密碼變更期限前的警告期(n天內 系統會警告使用者) :帳號失效期限
        :帳號取消日期(過改天就無法再用) :保留
        (可用暴力計算密碼程式破解。。。。《聽說》)
    etc/group檔案構造
        群組名稱: 群組密碼(在etc/gshadow中) : 群組ID(GID): 支援的帳號名稱

    3 增加使用者
        groupadd [-g GID] groupname    新增群組
            -g GID:自行設定GID的大小
        groupdel groupname    刪除群組 (使用之前先將etc/passwd中GID設定為這個群組的GID的使用者 刪除)
        useradd [-u UID] [-g GID] [-d HOME] [-mM] [-s shell] 增加使用者
            -u 直接給出一個UID
            -g 直接給出一個GID
            -d 直接將其根目錄指向已存在目錄
            -M 不建立根目錄
            -s 定義其使用的shell
    4 建立預設帳號 useradd username  (屬性設定 etc/login.defs  和  etc/default/useradd 中)

    5 userdel [-r] username  刪除帳號
        -r:將該帳號的[home directory] 和 [/var/spool/mail/username] 一併刪除  (不加只刪除passwd和shadow中的內容)
    
    6 chsh [-l] [-s shellname] 用工改變自己的shell的指令
        -l:列出當前機器上能用的shell名稱
        -s:將當前的shell變成shellname

    7 chfn 更改個人屬性

35. 密碼管理:
    passwd [username]  (單獨輸入是自己改     加名字是人root改)(指令存放在bin/passwd)

36. 使用者身份轉換:
    su (輸入密碼 程式設計root)
    sudo [-u username] command
        -u:將身份變成username的身份
    (可用visudo來修改sudo的許可權  在/etc/sudoers中)

37. 使用者查詢:
    id (使用者名稱)  檢視使用者資訊
    groups (群組名) 檢視群組資訊