Linux 常用指令與常識


  一、基本命令  

  1.1 命令的格式

  command [-options] parameter1 parameter2 ...

  1)command 命令的名稱,如變換工作目錄的命令為cd

  2)[]表示可選,-h 或者可選項的全名 --help

  3)命令、選項和參數以空格區分,不論幾個空格視為一個

  4)回車代表一行命令開始執行

  5)命令太長時,可以使用 \ 來轉義回車鍵,使命令連續到下一行

  6)在Linux系統中,英文大小寫含義不同

  1.2 重要的熱鍵

  1)[Tab]

  ca[Tab][Tab] 顯示開頭為ca的所有指令

  ls -al ~/.bash[tab][tab] 顯示以bash為開頭的文件名

  date --[Tab][Tab] date命令可以使用的參數有哪些 

  2)[Ctrl] - c

  撤銷正在執行的命令

  3)[Ctrl] -d 

  鍵盤輸入結束(End of File, EOF),例如,離開命令行模式

  4)[Shift] + [Page Up] / [Page Down]

  命令行界面中,實現翻頁

  1.3 Linux 在線求助 man page 

  1)man command 命令的用法

  man page大致分為以下部分

  

  man page 中常用的按鍵

  

  二、目錄操作命令  

  2.1 FHS(Filesystem Hierarchy Standard)下的目錄

   

   

   

   2.2 目錄切換

  cd [相對路徑或絕對路徑]: 切換目錄

  cd ~ : 回到家路徑

  cd .. : 回到上層路徑

  2.3 目錄創建與刪除

  mkdir [-mp] : 目錄名稱

  -m : 設置文件權限(711:rwx--x--x;r 4, w 2, x 1)

  -p : 遞歸創建沒有的目錄  

  rmdir [-p] : 目錄名稱

  -p : 連同上層空目錄一起刪除

  三、文件操作命令

  3.1 Linux文件屬性

  ls -al 列出所有文件詳細的權限與屬性。ls -d 僅列出目錄本身

   

  權限:d是目錄,-是文件,r 可讀,w 可寫,x 可執行。

  第一組為文件擁有者可具備的權限;第二組為加入此用戶組的賬號具有的權限;第三組為非本人及本用戶組的其他賬號具有的權限。  

  3.2 文件特殊權限 SUID SGID SBIT

  - rwsr-xr-x,此時稱為Set UID, SUID:

  • SUID 權限進對二進制程序有效
  • 執行者對於該程序需要具有x的可執行權限
  • 本權限僅在執行該程序過程中有效
  • 執行者具有該程序擁有者的權限

  -rwx--s--x, s在用戶組時,稱為set GID。SGID有如下功能:

  • SGID對二進制程序有用
  • 程序執行者對於該程序來說,需具備x的權限
  • 執行者在執行的過程中將會獲得該程序用戶組的支持

  drwxrwxrwt,只針對目錄有效:

  • 當用戶對此目錄具有w、x權限,即具有寫入權限
  • 當用戶在該目錄下建立文件或目錄時,僅有自己與root才有權力刪除該文件

  3.3 文件系統特性

  文件權限與文件屬性放到inode中,實際數據放在數據區塊中。

  超級區塊:記錄文件系統的整體信息,包括inode與數據區塊的總量、使用量、剩余量,以及文件系統的格式與相關信息等

  inode:記錄文件的屬性及文件數據所在的區塊號碼,一個文件一個inode

  數據區塊:記錄文件內容

      

                              inode/block 數據存取示意圖

  目錄樹讀取

  假設讀取 /etc/passwd 這個文件時:  

  1. / 的 inode:通過掛載點的信息找到 inode 號碼為 128 的根目錄 inode,且 inode 規范的權限讓我們可以讀取該 block 的內容( 有 r 與 x)
  2. / 的 block: 經過上個步驟取得 block 的號碼,並找到該內容有 etc/ 目錄的 inode 號碼( 33595521)
  3. etc/ 的 inode: 讀取 33595521 號 inode 得知 dmtsai 具有 r 與 x 的權限,因此可以讀取etc/ 的 block 內容
  4. etc/ 的 block: 經過上個步驟取得 block 號碼,並找到該內容有 passwd 文件的 inode 號碼 ( 36628004)
  5. passwd 的 inode: 讀取 36628004 號 inode 得知 dmtsai 具有 r 的權限, 因此可以讀取passwd 的 block 內容
  6. passwd 的 block: 最后將該 block 內容的數據讀出來

  3.4 復制、刪除與移動:cp、 rm、 mv

  cp [-adfilprsu] 源文件 目標文件

  -a : 相當於 -dr --preserve=all

  -i : 若目標文件已存在,覆蓋時先進行詢問

  -p : 連同文件的屬性(權限、用戶、時間)一起復制過去

  -r : 遞歸復制,用於目錄的復制操作

  --preserve=all : 除了-p權限相關參數外,還包括SELinux屬性,links、xattr等也復制

  rm [-fir] 文件或目錄

  -f : 忽略不存在的文件,不出現警告信息

  -i : 刪除前詢問使用者是否操作

  -r : 遞歸刪除   

  mv [-fiu] 源文件 目標文件

  -f : 如果目標文件存在,直接覆蓋

  -i : 目標文件存在,詢問是否覆蓋

  -u : 目標文件存在,且source比較新,才會更新  

  3.5 文件內容查看

  less 文件名  

  空白鍵 :向下翻動一頁
  [pagedown]:向下翻動一頁
  [pageup] :向上翻動一頁
  /字串 :向下搜尋“字串”的功能
  ?字串 :向上搜尋“字串”的功能
  n :重復前一個搜尋 ( 與 / 或 ? 有關 )
  N :反向的重復前一個搜尋 ( 與 / 或 ? 有關 )
  g :前進到這個數據的第一行去
  G :前進到這個數據的最后一行去 
  q :離開 less 這個程序

  head [ -n number ] 文件 取出前面幾行數據

  tail -n 20 /etc/man_db.conf 顯示最后20行

  tail -n +100 /etc/man_db.conf 列出100行之后的數據  

  3.6 文件的查找

  whereis [-bmsu] 文件或目錄名 

  -l : 列出whereis會去查詢的幾個主要目錄

  -b : 只找binary格式文件

  -m : 只在說明文件manual路徑下的文件

  -s : 只找source源文件

  find [PATH] [option] [action] (搜索全部路徑,耗時且占用磁盤資源)

  1. 與時間相關的選項,-atime(讀取時間)、-ctime(狀態時間)與-mtime(修改時間),以-mtime為例

  -mtime n; -mtime +n; -mtime -n n代表數字,符號表示如下圖所示。

  -newer file : file為一個存在的文件,列出比file還要新的文件

   

  2. 與使用者或用戶組名稱有關的參數

  -uid n : 使用者賬號

  -gid n : 用戶組ID

  -user name : name為使用者賬號名稱

  -group name : name為用戶組名稱

  - nouser : 查找文件的擁有者不在/etc/passwd中

  - nogroup : 查找文件的擁有用戶組不存在於/etc/group的文件。自行安裝軟件時,很可能該軟件的屬性當中並沒有文件擁有者。

  3. 與文件權限及名稱有關的參數

  -name filename

  -size [+-] SIZE : +50k 比50k大

  -type TYPE : 正規文件(f),設備文件(b, c),目錄(d),鏈接文件(l),socket(s)及FIFO(p)等屬性

  -perm mode : 剛好等於mode, 4755(-rwsr-xr-x)

  -perm -mode : 必須囊括mode, 如 -perm -0744 查找文件時,4755的文件也會被找出來

  4. 額外可進行的操作

  find / -perm 7000 -exec ls -l {} \; 

  {} 表示 find 找到的內容

  -exec 到 \; 表示 find額外需要的操作

  3.7 cat 用於連接文件並打印到標准輸出設備上

  cat filename

  四、壓縮文件操作

  4.1 壓縮命令 gzip 

  gzip [-cdtv#] 文件名 對目錄內的所有文件進行壓縮

  -c : 將壓縮的數據輸出到屏幕上

  -d : 解壓縮參數

  -t : 用來檢驗壓縮文件的一致性,看看文件有無錯誤

  -v : 顯示壓縮比信息

  -# : #表示數字,代表壓縮等級,-1最快,壓縮比最差,-9最慢,壓縮比最好,默認為-6

  4.2 tar 打包命令

  將多個目錄或文件打包成一個大文件。

  tar [-z|-j|-J] [cv] [-f 待建立的的新文件名] filename... 打包與壓縮

  tar [-z|-j|-J] [tv] [-f 既有的tar文件名] 查看文件名

  tar [-z|-j|-J] [xv] [-f 既有的tar文件名]  [-C 目錄] 解壓縮   

  -c :創建打包文件,可搭配 -v 來察看過程中被打包的文件名(filename)
  -t :查看打包文件的內容含有哪些文件名
  -x :解包或解壓縮,可以搭配 -C (大寫) 在特定目錄解壓 
  -z :通過 gzip 的支持進行壓縮/解壓縮:此時文件名最好為 *.tar.gz
  -j :通過 bzip2 的支持進行壓縮/解壓縮:此時文件名最好為 *.tar.bz2
  -J :通過 xz 的支持進行壓縮/解壓縮:此時文件名最好為 *.tar.xz 
  -v :在壓縮/解壓縮的過程中,將正在處理的文件名顯示出來
  -f filename:
  -C 目錄 :這個選項用在解壓縮,若要在特定目錄解壓縮,可以使用這個選項。

  -p :保留備份數據的原本權限與屬性,常用於備份(-c)重要的配置文件

  -P :保留絕對路徑,亦即允許備份數據中含有根目錄

  --exclude=FILE:在壓縮的過程中,不要將 FILE 打包

  例子: 

  壓 縮:tar -j<u>c</u>v -f filename.tar.bz2 要被壓縮的文件或目錄名稱
  查 詢:tar -j<u>t</u>v -f filename.tar.bz2
  解壓縮:tar -j<u>x</u>v -f filename.tar.bz2 -C 欲解壓縮的目錄

  tar -jcv -f /root/etc.newer.then.passwd.tar.bz2 -- newer-mtime = “2021/08/16” /etc/* 備份/etc目錄下,2021/08/16之后修改過的文件

  五、其他命令

  5.1 vim程序編輯器

  vim可以分為三種狀態,分別是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode)。

  vim 文件名 進入命令模式,i, o, a, r 任一個字符進入插入模式,按[ESC]回到命令模式;:, /, ? 任一個字符進入底行模式,按[ESC]回到命令模式。

  命令行模式下的常用命令:

  移動光標
      【1】控制光標移動:↑,↓,←,→

      【2】gg:移動到文件第一行

      【3】n<Enter>:n為數字,光標向下移動n行

      【4】0或功能鍵:移動到這一行最前面字符處

      【5】$或功能鍵[End]:移動到這一行最后面的字符

      【6】G:移動到文件最后一行 

  替換與查找

      【7】查找:/字符

      【8】n:向下重復前一個查找  

      【9】N:向上重復前一個查找

      【10】:n1,n2s/word1/word2/g:n1與n2行之間尋找word1字符串,替換為word2.

      【11】:1,$s/word1/word2/g:第一行與最后一行之間尋找word1字符串,替換為word2.

      【12】:1,$s/word1/word2/gc:第一行與最后一行之間尋找word1字符串,替換為word2,替換前讓用戶確認

  復制與粘貼

      【13】x與X:x相當於del,X相當於Backspace

      【14】dd:刪除光標所在那一行

      【15】ndd:刪除光標所在向下n行

      【16】yy:復制光標所在行  

      【17】nyy:復制光標向下n行

      【18】u:恢復前一個操作

      【19】Ctrl + r:重做上一個操作

      【20】. :重復前一個操作

  插入模式下的常用命令:

  插入模式下,才可以進行文字輸入。
      【1】ESC 退出編輯模式到命令行模式

  底行模式下的常用命令:
      【1】:w:將編輯的數據寫入硬盤文件
      【2】:q:退出vim 
      【3】:wq:保存后退出

  vim 額外功能

  1)可視區塊(visual block)  

  v         字符選擇,會將光標經過的地方反白選擇
  V        行選擇,會將光標經過的列反白選擇
  [Ctrl]+v    可以用長方形的方式選擇數據
  y        將反白的地方復制起來
  d             將反白的地方刪除掉
  p             將剛剛復制的區塊, 在光標所在處貼上

  2)多文件編輯  

  :n            編輯下一個文件
  :N      編輯上一個文件
  :files        列出目前這個 vim 的打開的所有文件

  可以使用 vim hosts /etc/hosts同時打開兩個文件,使用:n, :N在文件之間切換,進行多文件編輯

  3)多窗口功能

  vim 文件名 打開一個文件,:sp {filename} 打開一個新窗口

  ctrl + w + ↓         將光標移動到下方窗口
  ctrl + w + ↑         將光標移動到上方窗口
  ctrl + w + q         關閉下方窗口

  4)vim關鍵詞補全  

  [ctrl]+x -> [ctrl]+n 通過目前正在編輯的這個“文件的內容文字”作為關鍵字,予以補齊
  [ctrl]+x -> [ctrl]+f  以當前目錄內的“文件名”作為關鍵字, 予以補齊
  [ctrl]+x -> [ctrl]+o 以擴展名作為語法補充,以 vim 內置的關鍵字,予以補齊

  5.2 管道命令

  5.2.1 選取命令

  cut -d '分隔字符' -f (取出第幾段) fields  

  cut -c 字符區間

  例子: echo ${PATH}  /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/dmtsai/.local/bin:/home/dmtsai/bin

            1     2   3      4      5            6

  echo ${PATH}  |  cut -d ':' -f 5    結果:/home/dmtsai/.local/bin

  echo ${PATH}  |  cut -d ':' -f 3, 5    結果:/usr/local/sbin /home/dmtsai/.local/bin

  export 內容: 

  declare -x HISTCONTROL="ignoredups"
  declare -x HISTSIZE="1000"
  declare -x HOME="/home/dmtsai"
  declare -x HOSTNAME="study.centos.vbird"

  export | cut -c 12-  

  HISTCONTROL="ignoredups"
  HISTSIZE="1000"
  HOME="/home/dmtsai"
  HOSTNAME="study.centos.vbird"

  grep [-acinv] [-A] [-B] [--color=auto] '查找字符' filename  

  -a :將 binary 文件以 text 文件的方式搜尋數據
  -c :計算找到 '搜尋字串' 的次數
  -i : 忽略大小寫的不同, 所以大小寫視為相同
  -n :順便輸出行號
  -v :反向選擇, 亦即顯示出沒有 '搜尋字串' 內容的那一行
  --color=auto : 可以將找到的關鍵字部分加上顏色的顯示

  -A : 除了列出該行外,后續的n列也列出來

  -B : 除了列出該行外,前面的n列也列出來

  例子:

  last內容:  

  root pts/1 192.168.201.101 Sat Feb 7 12:35 still logged in
  root pts/1 192.168.201.101 Fri Feb 6 12:13 - 18:46 ( 06:33)
  root pts/1 192.168.201.254 Thu Feb 5 22:37 - 23:53 ( 01:16)

   last | grep -v 'root' | cut -d ' ' -f1 取出含有root的行且是第一欄

  5.2.2 排序命令

  sort [-fbMnrtuk] [file or stdin]  

  -f :忽略大小寫的差異,例如 A 與 a 視為編碼相同
  -b :忽略最前面的空白字符部分
  -M :以月份的名字來排序,例如 JAN, DEC 等等的排序方法
  -n :使用“純數字”進行排序( 默認是以文字體態來排序的) 
  -r :反向排序
  -u :就是 uniq ,相同的數據中,僅出現一行代表
  -t :分隔符號,默認是用 [tab] 鍵來分隔
  -k :以那個區間 ( field) 來進行排序的意思

  例子:cat  /etc/passwd | sort -t ':' -k 3 以第三欄排序

  5.2.3 字符轉換命令

  tr [ds] SET1  ...

  -d : 刪除字符SET1 

  -s : 替換掉重復的字符

  last | tr '[a-z]' '[A-Z]' 所有的小寫變成大寫

  join [-til2] file1 file2

  -t : join 默認以空白字符分隔數據,並且比對“第一個字段”的數據,如果兩個文件相同,則將兩筆數據聯成一行,且第一個字段放在第一個
  -i : 忽略大小寫的差異;
  -1 :第一個文件要用哪個字段來分析
  -2 :第二個文件要用哪個字段來分析

   例子:  

  head -n 3 /etc/passwd /etc/shadow
  ==> /etc/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/shadow <==
  root:$6$wtbCCce/PxMeE5wm$KE2IfSJr...:16559:0:99999:7:::
  bin:*:16372:0:99999:7:::
  daemon:*:16372:0:99999:7:::
  # 由輸出的數據可以發現這兩個文件的最左邊字段都是相同帳號!且以 : 分隔  

  join -t  ':'  /etc/passwd  /etc/shadow | head -n 3
  root:x:0:0:root:/root:/bin/bash:$6$wtbCCce/PxMeE5wm$KE2IfSJr...:16559:0:99999:7:::
  bin:x:1:1:bin:/bin:/sbin/nologin:*:16372:0:99999:7:::
  daemon:x:2:2:daemon:/sbin:/sbin/nologin:*:16372:0:99999:7:::

  5.3 sed工具

  sed [-nefr] [操作]  

  選項與參數:
  -n : 在一般 sed 的用法中,所有來自 STDIN 的數據一般都會被列出到屏幕上。但如果加上 -n 參數后, 則只有經過 sed 特殊處理的那一行( 或者動作)才會被列出來
  -e : 直接在命令行界面上進行 sed 的動作編輯
  -f : 直接將 sed 的動作寫在一個文件內, -f filename 
  -r : sed 的動作支持的是延伸型正則表達式的語法。 ( 默認是基礎正則表達式語法)
  -i : 直接修改讀取的文件內容,而不是由屏幕輸出。
  動作說明: [n1[,n2]]function
  n1, n2 : 一般代表“選擇進行動作的行數”,舉例來說,如果我的動作是需要在 10 到 20 行之間進行的,則“ 10,20[動作行為] ”function 有下面這些:
  a : 新增,sed '2a drink tea' 在第二行后加上drink tea
  c : 取代,sed '2, 5c No 2-5 number'
  d : 刪除 sed '2,5d' 刪除2-5行
  i : 插入,i 的后面可以接字串, 而這些字串會在上一行出現
  p : 打印,亦即將某個選擇的數據印出。通常 p 會與參數 sed -n 一起運行 sed -n '5, 7p' 打印出5-7行
  s : 取代,通常這個 s 的動作可以搭配正則表達式 例如 sed  's/要被替換的字符/新的字符/g'  sed 's/#.*$//g' 刪除注釋之后的內容

  5.4 awk 數據處理工具

   awk '條件類型1{操作1} 條件類型2{操作2} ...' filename

  last -n 5 | awk '{print $1 "\t" $3}' 打印出第一欄和第三欄數據  

  變量名稱 代表意義
  NF      每一行( $0)擁有的字段總數
  NR          目前awk所處理的是“第幾行”數據
  FS          目前的分隔字符, 默認是空白鍵

  last -n 5 | awk '{print $1 "\t lines: " NR "\t columns: " NF}'

  cat /etc/passwd | awk 'BEGIN {FS=":"} $3 < 10 {print $1 "\t " $3}'

  5.5 用戶身份切換

  su [-lm] [-c命令] [username]  

  - : 代表使用 login-shell 的變量文件讀取方式來登陸系統;若使用者名稱沒有加上去,則代表切換為 root 的身份。
  -l : 與 - 類似,但后面需要加欲切換的使用者帳號!也是 login-shell 的方式。
  -m : 使用目前的環境設置,而不讀取新使用者的配置文件
  -c : 后面可以加上指令


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM