Linux檔案及目錄管理

說故事的五公子發表於2020-08-05

1. 學會使用命令幫助

1.1. 概述

在linux終端,面對命令不知道怎麼用,或不記得命令的拼寫及引數時,我們需要求助於系統的幫助文件; linux系統內建的幫助文件很詳細,通常能解決我們的問題,我們需要掌握如何正確的去使用它們;

  • 在只記得部分命令關鍵字的場合,我們可通過man -k來搜尋;
  • 需要知道某個命令的簡要說明,可以使用whatis;而更詳細的介紹,則可用info命令;
  • 檢視命令在哪個位置,我們需要使用which;
  • 而對於命令的具體引數及使用方法,我們需要用到強大的man;

下面介紹這些命令;

1.2. 命令使用

檢視命令的簡要說明

簡要說明命令的作用(顯示命令所處的man分類頁面):

$whatis command

正則匹配:

$whatis -w "loca*"

更加詳細的說明文件:

$info command

使用man

查詢命令command的說明文件:

$man command
eg:man date

使用page up和page down來上下翻頁

在man的幫助手冊中,將幫助文件分為了9個類別,對於有的關鍵字可能存在多個類別中, 我們就需要指定特定的類別來檢視;(一般我們查詢bash命令,歸類在1類中);

man頁面所屬的分類標識(常用的是分類1和分類3)

(1)、使用者可以操作的命令或者是可執行檔案
(2)、系統核心可呼叫的函式與工具等
(3)、一些常用的函式與資料庫
(4)、裝置檔案的說明
(5)、設定檔案或者某些檔案的格式
(6)、遊戲
(7)、慣例與協議等。例如Linux標準檔案系統、網路協議、ASCⅡ,碼等說明內容
(8)、系統管理員可用的管理條令
(9)、與核心有關的檔案

前面說到使用whatis會顯示命令所在的具體的文件類別,我們學習如何使用它

eg:
$whatis printf
printf               (1)  - format and print data
printf               (1p)  - write formatted output
printf               (3)  - formatted output conversion
printf               (3p)  - print formatted output
printf [builtins]    (1)  - bash built-in commands, see bash(1)

我們看到printf在分類1和分類3中都有;分類1中的頁面是命令操作及可執行檔案的幫助;而3是常用函式庫說明;如果我們想看的是C語言中printf的用法,可以指定檢視分類3的幫助:

$man 3 printf

$man -k keyword

查詢關鍵字 根據命令中部分關鍵字來查詢命令,適用於只記住部分命令的場合;

eg:查詢GNOME的config配置工具命令:

$man -k GNOME config| grep 1

對於某個單詞搜尋,可直接使用/word來使用: /-a; 多關注下SEE ALSO 可看到更多精彩內容

檢視路徑

檢視程式的binary檔案所在路徑:

$which command

eg:查詢make程式安裝路徑:

$which make
/opt/app/openav/soft/bin/make install

檢視程式的搜尋路徑:

$whereis command

當系統中安裝了同一軟體的多個版本時,不確定使用的是哪個版本時,這個命令就能派上用場;

2.檔案及目錄管理

檔案管理不外乎檔案或目錄的建立、刪除、查詢、移動,有mkdir/rm/mv

檔案查詢是重點,用find來進行查詢;find的引數豐富,也非常強大;

檢視檔案內容是個大的話題,文字的處理有太多的工具供我們使用,在本章中只是點到即止,後面會有專門的一章來介紹文字的處理工具;

有時候,需要給檔案建立一個別名,我們需要用到ln,使用這個別名和使用原檔案是相同的效果;

2.1. 建立和刪除

  • 建立:mkdir
  • 刪除:rm
  • 刪除非空目錄:rm -rf file目錄
  • 刪除日誌 rm log (等價: $find ./ -name “log” -exec rm {} ?
  • 移動:mv
  • 複製:cp (複製目錄:cp -r )

檢視當前目錄下檔案個數:

$find ./ | wc -l

複製目錄:

$cp -r source_dir  dest_dir

2.2. 目錄切換

  • 找到檔案/目錄位置:cd
  • 切換到上一個工作目錄: cd -
  • 切換到home目錄: cd or cd ~
  • 顯示當前路徑: pwd
  • 更改當前工作路徑為path: $cd path

2.3. 列出目錄項

  • 顯示當前目錄下的檔案 ls
  • 按時間排序,以列表的方式顯示目錄項 ls -lrt

以上這個命令用到的頻率如此之高,以至於我們需要為它建立一個快捷命令方式:

在.bashrc 中設定命令別名:

alias lsl='ls -lrt'
alias lm='ls -al|more'

這樣,使用lsl,就可以顯示目錄中的檔案按照修改時間排序;以列表方式顯示;

  • 給每項檔案前面增加一個id編號(看上去更加整潔):

    >ls | cat -n
    

    1 a 2 a.out 3 app 4 b 5 bin 6 config

注:.bashrc 在/home/你的使用者名稱/ 資料夾下,以隱藏檔案的方式儲存;可使用 ls -a 檢視;

2.4. 查詢目錄及檔案

搜尋檔案或目錄:

$find ./ -name "core*" | xargs file

查詢目標資料夾中是否有obj檔案:

$find ./ -name '*.o'

遞迴當前目錄及子目錄刪除所有.o檔案:

$find ./ -name "*.o" -exec rm {} \;

find是實時查詢,如果需要更快的查詢,可試試locate;locate會為檔案系統建立索引資料庫,如果有檔案更新,需要定期執行更新命令來更新索引庫:

$locate string

尋找包含有string的路徑:

$updatedb

與find不同,locate並不是實時查詢。你需要更新資料庫,以獲得最新的檔案索引資訊。

2.5. 檢視檔案內容

檢視檔案:cat vi head tail more

顯示時同時顯示行號:

$cat -n

按頁顯示列表內容:

$ls -al | more

只看前10行:

$head - 10 **

顯示檔案第一行:

$head -1 filename

顯示檔案倒數第五行:

$tail -5 filename

檢視兩個檔案間的差別:

$diff file1 file2

動態顯示文字最新資訊:

$tail -f crawler.log

2.6. 查詢檔案內容

使用egrep查詢檔案內容:

egrep '03.1\/CO\/AE' TSF_STAT_111130.log.012
egrep 'A_LMCA777:C' TSF_STAT_111130.log.035 > co.out2

2.7. 檔案與目錄許可權修改

  • 改變檔案的擁有者 chown
  • 改變檔案讀、寫、執行等屬性 chmod
  • 遞迴子目錄修改: chown -R tuxapp source/
  • 增加指令碼可執行許可權: chmod a+x myscript

chmod語法

chmod語法:chmod [-cfvR] [--help] [--version] mode file...

引數說明

mode : 許可權設定字串,格式如下 :

[ugoa...][[+-=][rwxX]...][,...]

其中:

  • u 表示該檔案的擁有者,g 表示與該檔案的擁有者屬於同一個群體(group)者,o 表示其他以外的人,a 表示這三者皆是。
  • + 表示增加許可權、- 表示取消許可權、= 表示唯一設定許可權。
  • r 表示可讀取,w 表示可寫入,x 表示可執行,X 表示只有當該檔案是個子目錄或者該檔案已經被設定過為可執行。

其他引數說明:

  • -c : 若該檔案許可權確實已經更改,才顯示其更改動作
  • -f : 若該檔案許可權無法被更改也不要顯示錯誤訊息
  • -v : 顯示許可權變更的詳細資料
  • -R : 對目前目錄下的所有檔案與子目錄進行相同的許可權變更(即以遞迴的方式逐個變更)
  • --help : 顯示輔助說明
  • --version : 顯示版本

chown語法:

chown [-cfhvR] [--help] [--version] user[:group] file...

引數 :

  • user : 新的檔案擁有者的使用者 ID
  • group : 新的檔案擁有者的使用者組(group)
  • -c : 顯示更改的部分的資訊
  • -f : 忽略錯誤資訊
  • -h :修復符號連結
  • -v : 顯示詳細的處理資訊
  • -R : 處理指定目錄以及其子目錄下的所有檔案
  • --help : 顯示輔助說明
  • --version : 顯示版本

2.8. 給檔案增加別名

建立符號連結/硬連結:

ln cc ccAgain :硬連線;刪除一個,將仍能找到;
ln -s cc ccTo :符號連結(軟連結);刪除源,另一個無法使用;(後面一個ccTo 為新建的檔案)

2.9. 管道和重定向

  • 批處理命令連線執行,使用 |
  • 串聯: 使用分號 ;
  • 前面成功,則執行後面一條,否則,不執行:&&
  • 前面失敗,則後一條執行: ||
ls /proc && echo  suss! || echo failed.

能夠提示命名是否執行成功or失敗;

與上述相同效果的是:

if ls /proc; then echo suss; else echo fail; fi

重定向:

ls  proc/*.c > list 2> &l 將標準輸出和標準錯誤重定向到同一檔案;

等價的是:

ls  proc/*.c &> list

清空檔案:

:> a.txt

重定向:

echo aa >> a.txt

2.10. 設定環境變數

啟動帳號後自動執行的是 檔案為 .profile,然後通過這個檔案可設定自己的環境變數;

安裝的軟體路徑一般需要加入到path中:

PATH=$APPDIR:/opt/app/soft/bin:$PATH:/usr/local/bin:$TUXDIR/bin:$ORACLE_HOME/bin;export PATH

2.11. Bash快捷輸入或刪除

快捷鍵:

Ctl-U   刪除游標到行首的所有字元,在某些設定下,刪除全行
Ctl-W   刪除當前游標到前邊的最近一個空格之間的字元
Ctl-H   backspace,刪除游標前邊的字元
Ctl-R   匹配最相近的一個檔案,然後輸出

2.12. 綜合應用

查詢record.log中包含AAA,但不包含BBB的記錄的總數:

cat -v record.log | grep AAA | grep -v BBB | wc -l

相關文章