請大家關注點贊,已經完成物聯網相關開發,會從硬件層,硬件中間層,傳輸層,軟件中間件(物聯網雲平臺),APP開發相關博文。首先從嵌入式開發博文開始!上一節關於<>。本節關於Linux系統中文件和目錄相關命令介紹。
1、熟悉Linux的文件系統結構
Linux文件系統就是一個樹形的分層組織結構
注:為了規範文件目錄命名和存放的標準,Linux基金會頒佈了文件系統層次結構標準FHS。
/bin :bin是二進制(binary)英文縮寫;
/boot:存放的都是系統啟動時要用的程序;
/dev:包含了所有Linux系統中使用的外部設備;
/etc:存放了系統管理時要用到的各種配置文件和子目錄;
/lib:存放系統動態鏈接共享庫的;
/home:普通用戶的主目錄;
/root:根用戶(超級用戶)的主目錄。
2、常見的文件及目錄操作命令
1) mkdir命令 創建目錄
mkdir 創建目錄
mkdir -p /a/b 創建嵌套的目錄
mkdir用來創建指定名稱的目錄,要求創建目錄的用戶在當前目錄中具有寫權限,並且指定的目錄名不能是當前目錄中已有的目錄。
A 命令格式:mkdir [選項] 目錄
B 命令功能:在指定位置創建指定文件名命名的文件夾或目錄,要創建文件夾或目錄的用戶必須對所創建的文件夾的父文件夾具有寫權限,且同一個目錄下不能有重名的。
C 命令參數:-m,–mode模式 設定權限(類似chmod),而不是rwxrwxrwx
-p,–parents可以是一個路徑的名稱,此時若路徑中的某些目錄不存在,加上此選項後系統將自動建立好那些尚不存在的目錄,即一次可以建立多個目錄
-v,–verbose創建當前新目錄或文件時顯示信息,如“已創建目錄test1”
D 命令實例:
①創建一個空目錄
mkdir test1
②遞歸創建多個目錄
mkdir –p ./test1/test(./表示當前目錄,../表示上級目錄,/表示根目錄)
③創建權限為777的目錄
mkdir –m 777 test777
④創建新目錄顯示信息
mkdir –v test
⑤創建項目的目錄結構
mkdir –vp src/{com/sitech/{admin/{entity/,dao/,service,controller},common/util/},config/}
E 注意事項:最後一個實例⑤對順序是有要求的,即在-vp時才表示-v –p操作,而若是-pv則在上述語句中會默認為創建-vp目錄。
2) ls命令 查看目錄內容
ls 列表顯示目錄內容 通配符?單字符 含其一或段[a,b,c-d] *任意;
ls -l長格式顯示文件或目錄信息;
ls -a顯示所有包括隱藏的文件或目錄;
ls -h以K、M、G單位顯示文件或目錄信息;
ls -d顯示目錄本身屬性信息;
缺省下用來打印當前目錄的清單,如果ls指定其他目錄,那麼就會顯示指定目錄的文件及文件夾清單。通過ls命令不僅可以查看linux文件夾包含的文件,而且可以查看文件權限(包括目錄、文件夾、文件)、查看目錄信息等。
A 命令格式:ls [選項] [目錄名]
B 命令功能:列出目標目錄中所有的子目錄和文件
C 命令參數:
-a,列出目錄下的所有文件,包括以.開頭的隱含文件;
-c 配合-lt根據ctime排序及根據ctime(文件狀態最後更改的時間)配合-l 顯示ctime但根據名稱排序;
-l 除了文件名之外,還將文件的權限、所有者、文件大小等信息詳細列出來;
-t 以文件的修改順序排序;
-u 配合-lt顯示訪問時間,而且依據訪問時間排序; 配合-l 顯示訪問時間,但根據名稱排序;
-v 依據版本進行排序;
-x 逐行列出項目,而不是逐欄列出;
-X 根據擴展名進行排序;
-1 每行只列出一個文件;
-F 可以在顯示子目錄的時候在它的文件名之後加一個“/”,而文件後面的“*”表示這是一個可執行程序。
D 常用實例:
①列出 /test1/test文件夾下的所有文件和目錄的詳細情況
進入test1目錄,ls –l –R(或-lR) src
②列出當前目錄中所有以“t”開頭的所有文件目錄的信息,
ls –l t*
③只列出文件下的子目錄:
ls -F ./src |grep /$ 列出src目錄下面的子目錄
④列出目前工作目錄下所有檔案及目錄;目錄於名稱後加”/”, 可執行檔案名稱後加”*”
ls –AF
3)cd命令
cd命令是Linux裡面最基本的命令,很多其他命令都是建立在它的基礎之上的。
A 命令格式:cd [目錄名]
B 命令功能:切換當前目錄至dirName
C 常用範例:
①進入系統根目錄
cd /
②進入當前目錄的上一級目錄:cd ..或者cd ..//
③進入當前用戶的主目錄
cd 或者 cd~
④跳轉到指定目錄
cd /home/lovelot/test1(根目錄下進入)
跳轉到指定目錄,從根目錄開始,目錄名稱前加“/”,當前目錄的子目錄寫名稱即可。
⑤返回進入此目錄之前所在的目錄
cd –
⑥把上個命令的參數作為cd參數使用
cd !$
D 注意事項:
跳轉到指定目錄,從根目錄開始,目錄名稱前加“/”,當前目錄的子目錄寫名稱。
4) pwd命令
使用“pwd”命令來查看“當前工作目錄”的完整路徑,每當你在終端進行操作時,都會有一個當前工作目錄,在不太確定當前位置時,可以使用pwd命令來查看當前目錄再文件系統裡的確切位置。
A 命令格式:pwd [選項]
B 命令功能:查看“當前工作目錄”的完整路徑
C 常用參數:一般情況下不使用任何參數,如果目錄是鏈接時,pwd –P 顯示出實際路徑,而非使用鏈接路徑。若當前路徑被刪除了,pwd顯示的仍是原路徑。
D 常用範例:
具體見上面各個應用。
5) rm命令 刪除目錄或文件
rmdir 刪除空目錄
rm 刪除目錄或文件
rm -f 強制刪除目錄或文件
rm -r 遞歸刪除目錄或文件
該命令的功能是刪除一個目錄中的一個或多個文件或目錄,它也可以將某個目錄及其以下的所有文件及目錄均刪除,對於鏈接文件,只是刪除了鏈接,原有文件保持不變。
A 命令格式:rm [選項] 文件
B 命令功能:刪除指定目錄中的一個或多個文件或目錄,如果沒有使用-r選項,則rm不會刪除目錄,如果使用rm來刪除文件,通常仍可以將文件恢復原狀。
C 命令參數:
-f,–force忽略不存在的文件,從不給出提示;
-i,–interactive 進行交互式地刪除;
-r,-R,–recursive 指示rm將參數中列出的全部目錄和子目錄均遞歸地刪除
-v,–verbose 詳細顯示進行的步驟;
D 命令實例:
①刪除文件file,系統會先詢問是否刪除,rm –i log.log,輸入y之後就會刪除
②強行刪除file,系統不再提示 rm –f log1.log
③刪除任何.log文件,刪除前逐一詢問 rm –i *.log
④將test子目錄及子目錄中所有檔案都刪除 rm –r test
⑤將test1子目錄及子目錄中所有檔案都刪除,並且不用一一詢問
rm –rf test1(常用)
⑥刪除以-f開頭的文件
rm -- -f
⑦自定義回收站功能:
myrm(){ D=/tmp/(date+(date+D; mv “@”@”D && echo “moved to $D ok”; }
6) rmdir命令
rmdir是常用的命令,該命令的功能是刪除空目錄,一個目錄被刪除之前必須是空的。注意(rm –r dir命令可代替rmdir,但是有很大危險性),刪除某目錄時也必須對父目錄有寫權限。
A 命令格式:rmdir [選項]…目錄…
B 命令功能:該命令從一個目錄中刪除一個或多個子目錄項,刪除某目錄時也必須對父目錄有寫權限。
C 命令參數:
-p 遞歸刪除目錄dirname,當子目錄刪除後其父目錄為空時,也一同被刪除,如果整個路徑被刪除或者由於某種原因保留部分路徑,則系統在標準輸出上顯示相應的信息。
-v,–verbose顯示指令執行過程
D 命令實例:
①rmdir不能刪除非空目錄 rmdir test1,該命令不能直接刪除非目錄;
②rmdir –p 當子目錄被刪除後使它也一併成為空目錄的話,則順便一起刪除。
7) mv命令 移動或重命名文件或目錄
mv命令是move的縮寫,可以用來移動文件或者將文件改名(move (rename) files),是Linux系統下常用的命令,經常用來備份文件或者目錄。
A 命令格式:mv [選項] 源文件或目錄 目標文件或目錄
B 命令功能:視mv命令中第二個參數類型的不同(是目標文件還是目標目錄),mv命令將文件重命名或將其移至一個新的目錄中。當第二個參數類型是文件時,mv命令完成文件重命名,此時,源文件只能有一個(也可以是源目錄名),它將所給的源文件或目錄重命名為給定的目標文件名。當第二個參數是已存在的目錄名時,源文件或目錄參數可以有多個,mv命令將各參數指 定的源文件均移至目標目錄中。在跨文件系統移動文件時,mv先拷貝,再將原有文件刪除,而鏈接該文件的鏈接也將丟失。
C 命令參數:
-b :若需要覆蓋文件,則覆蓋前先行備份;
-f : force強制的意思,如果目標文件已存在,不會詢問而直接覆蓋;
-i : 若目標文件已經存在時,就會詢問是否覆蓋。
-t : –target –directory,即指定mv的目標目錄,該選項適用於移動多個源文件到一個目錄的情況,此時目標目錄在前,源文件在後。
D 命令實例:
①文件改名:將文件log.log 改名為log.txt
mv log.log log.txt
②移動文件:將log2015.log文件移至test
mv log2015.log test
③將文件log1.txt,log2.txt,log3.txt移至目錄test中
mv log1.txt log2.txt log3.txt test
mv –t ./test log1.txt log2.txt log3.txt
④將文件file1改名為file2,如果file2已經存在,則詢問是否覆蓋
mv –i log1.txt log2.txt
⑤將文件file1改名為file2,即時file2存在,也是直接覆蓋掉
mv –f log3.txt log2.txt
log3.txt的內容直接覆蓋了log2.txt內容,-f這是個危險的選項,使用時候一定要保持頭腦清醒,一般情況下最好不用加上它。
⑥目錄的移動
mv dir1 dir2
如果目錄dir2不存在,將目錄dir1改名為dir2,否則將dir1移動到dir2中
⑦移動當前文件夾下的所有文件到上一級目錄
mv * ../
⑧把當前目錄的一個子目錄裡的文件移動到另一個子目錄裡
mv test1/*.txt test
⑨文件被覆蓋前做簡單備份,前面加參數-b
mv log1.txt –b log2.txt
說明:-b不接受參數,mv會去讀取環境變量VERSION_CONTROL來作為備份策略。–backup該選項指定如果目標文件存在時的動作,共有四種備份策略:
1.CONTROL=none或off : 不備份。
2.CONTROL=numbered或t:數字編號的備份
3.CONTROL=existing或nil:如果存在以數字編號的備份,則繼續編號備份m+1…n:
執行mv操作前已存在以數字編號的文件log2.txt.~1~,那麼再次執行將產生log2.txt~2~,以次類推。如果之前沒有以數字編號的文件,則使用下面講到的簡單備份。
4.CONTROL=simple或never:使用簡單備份:在被覆蓋前進行了簡單備份,簡單備份只能有一份,再次被覆蓋時,簡單備份也會被覆蓋。
mv不會創建新目錄,只能將源目錄或源文件移入已創建好的目錄,若目標文件或文件夾不存在時,將只會是改名,而不是移動文件或目錄
8) cp命令
cp命令用來複制文件或者目錄,是Linux系統中最常用的命令之一。一般情況下,shell會設置一個別名,在命令行復制文件時,如果目標文件已存在,就會詢問是否覆蓋,不管你是否使用參數-i,但如果是在shell腳本中執行cp時,沒有參數-i時不會詢問是否覆蓋,這說明命令行和shell腳本的執行方式有些不同。
A 命令格式: cp [選項]… [-T] 源 目的
或 cp [選項]… 源… 目錄
或 cp [選項]… -t 目錄 源…
B 命令功能:將源文件複製至目標文件,或將多個源文件複製至目標文件
C 命令參數:
-i ,–interactive 覆蓋前詢問(使前面的-n選項失效);
-n ,–no-clobber 不要覆蓋已存在的文件(使前面的-i選項失效);
-R,-r,–recursive 複製目錄及目錄內的所有項目
D 命令實例:
①複製單個文件到目標目錄,文件在目標文件中不存在
cp log.log test
在沒有帶-a參數時,兩個文件的時間是不一樣的,在帶來-a參數時,兩個文件的時間是一致的。
②目標文件存在時,會詢問是否覆蓋。
cp log.log test
目標文件存在時,會詢問是否覆蓋,這是因為cp 是cp –i 的別名,目標文件存在時,即時加了-f標誌,也還會詢問是否覆蓋。
③複製整個目錄
cp –a test3 test5
注意目標目錄存在與否結果是不一樣的,目標目錄存在時,整個源目錄被複制到目標目錄裡面。
④複製的log.log建立一個鏈接檔案log_link.log
cp –s log.log log_link.log
⑤那個log_link.log是由-s的參數造成的,建立的是一個【快捷方式】,所以會看到在文件的最右邊,會顯示這個文件是鏈接到哪裡去的。
9)touch命令
Linux的touch命令不常用,一般在使用make的時候可能會用到,用來修改文件時間戳,或者新建一個不存在的文件。
A 命令格式: touch [選項]…文件…
B 命令功能:touch命令參數可更改文檔或目錄的日期時間,包括存取時間和更改時間。
C 命令參數:
-a 或–time = atime–time =access或–time=use 只更改存取時間;
-c 或–no-create 不建立任何文檔;
-d 使用指定的日期時間,而非現在的時間;
-m 或–time=mtime或–time=modify 只更改變動時間;
-r 把指定文檔或目錄的日期時間,統統設成和參考文檔和目錄的日期時間相同;
-t 使用指定的日期,而非現在的時間。
D 常用實例:
①創建不存在的文件:
touch log2015.log log2016.log
如果log2014.log不存在,則不創建文件
②更新log.log的時間和log2015.log時間戳相同
touch –r log2015.log log.log
③設定文件的時間戳
touch –t 201505191357.50 log.log
-t time 使用指定的時間值 time 作為指定文件相應時間戳記的新值.此處的 time規定為如下形式的十進制數:
[[CC]YY]MMDDhhmm[.SS]
這裡,CC為年數中的前兩位,即”世紀數”;YY為年數的後兩位,即某世紀中的年數.如果不給出CC的值,則touch 將把年數CCYY限定在1969–2068之內.MM為月數,DD為天將把年數CCYY限定在1969–2068之內.MM為月數,DD為天數,hh 為小時數(幾點),mm為分鐘數,SS為秒數.此處秒的設定範圍是0–61,這樣可以處理閏秒.這些數字組成的時間是環境變量TZ指定的時區中的一個時 間.由於系統的限制,早於1970年1月1日的時間是錯誤的。
10) cat命令
cat命令的用途是連接文件或標準輸入並打印,這個命令常用來顯示文件內容,或者將幾個文件連接起來顯示,或者從標準輸入讀取內容並顯示,它常與重定向符號配合使用。
A 命令格式:cat [選項] [文件]…
B 命令功能:cat主要有三大功能:
①一次顯示整個文件:cat filename
②從鍵盤創建一個文件:cat>filename只能創建新文件,不能編輯已有文件
③將幾個文件合併為一個文件:cat file1 file2>file
D 命令參數:
-A,–show-all 等價於-vET;
-b,–number-nonblank 對非空輸出行編號;
-e 等價於 –vE;
-E,–show-ends 在每行結束處顯示$;
-n,–number 對輸出的所有行編號,由1開始對所有輸出的行數編號;
-s,–squeeze-blank 有連續兩行以上的空白行,就代換為一行的空白行;
-t 與-vT等價;
-T,–show-tabs 將跳格字符顯示為^I;
D 使用實例:
①把log2012.log的文件內容加上行號後輸入log2013.log這個文件
cat –n log2012.log log2013.log
②把log2012.log和log2013.log的文件內容加上行號(空白行不加)之後將內容附加到log.log裡。
cat –b log2012.log log2013.log log.log
③把log2012.log的文件內容加上行號後輸入log.log這個文件裡
cat –n log2012.log>log.log
④注意tac是反向列示,tac是將cat反過來,所以它的功能就跟cat相反,cat是由第一行到最後一行連續顯示在熒幕上,而tac則是由最後一行到第一行反向在銀幕上顯示。
11) more命令
more命令功能類似cat,cat命令是整個文件的內容從上到下顯示在屏幕上,more會一起一頁一頁的顯示方便使用者逐頁閱讀,而最基本的指令就是按空白鍵(space)就往下一頁顯示,按b鍵就會往回(back)一頁顯示,而且還有搜尋字串的功能,more命令從前向後讀取文件,因此在啟動時就加載整個文件。
A 命令格式:
more [-dlfpcsu][-num][+/pattern][+linenum][file…]
B 命令功能:more命令和cat的功能一樣都是查看文件裡的內容,但有所不同的是more可以按頁來查看文件的內容,還支持直接跳轉行等功能。
C 命令參數:
+n 從第n行開始顯示;
-n 定義屏幕大小為n行;
+/pattern 在每個檔案顯示前搜尋該字串(pattern),然後從該字串前兩行之後開始顯示;-c 從頂部清屏,然後顯示;
-p 通過清除窗口而不是滾屏來對文件進行換頁,與-c選項相似;
D 常用操作命令:
Enter 向下n行,需要定義,默認為1行;
Ctrl+F、空格鍵 向下滾動一屏;
Ctrl+B 返回上一屏;
= 輸出當前行的行號;
:f 輸出文件名和當前行的行號;
q 退出more;
E 常用實例:
①顯示文件中從第3行起的內容
more +3 log2012.log
②從文件中查找第一個出現”day3”字符串的行,並從該處前兩行開始顯示輸出
more +/day3 log2012.log
③設定每屏顯示行數
more -5 log2012.log
最下面顯示了該屏展示的內容佔文件總行數的比例,按Ctrl+F或者空格鍵將會顯示下一屏5條內容,百分比也會跟著變化。
④列一個目錄下的文件,由於內容太多,我們應該學會用more來分頁,這得和管道|結合起來
ls –l | more -5
每頁顯示5個文件信息,按Ctrl+F或者空格鍵將會顯示下5條文件信息
12) tail命令
tail命令從指定點開始將文件寫到標準輸出流,使用tail命令的-f選項可以方便的查閱正在改變的日誌文件,tail –f filename會把filename裡最尾部的內容顯示在屏幕上,並且不但刷新,使你看到最新的文件內容。(經常用來在查看服務器上的日誌文件)
A 命令格式: tail [必要參數][選擇參數][文件]
B 命令功能:用於顯示指定文件末尾內容,不指定文件時,作為輸入信息進行處理,常用查看日誌文件。
C 命令參數:
-f 循環讀取;
-q 不顯示處理信息;
-v 系那是詳細的處理信息;
-c 顯示的字節數;
-n 顯示行數;
D 命令實例:
①顯示文件末尾內容
tail –n 5 log2014.log 顯示文件最後5行的內容
②循環查看文件內容
tail -f test.log
③從第5行開始顯示文件
tail –n +5 log2014.log
13)文件內容統計
wc 文件內容統計
wc -l統計行數
wc -w統計單詞數
wc -c統計字節
A 命令實例:
14)查找文件或目錄
find 在目錄中查找文件或目錄
find 範圍 -name 目標條件 按名稱查找
find 範圍 -type 目標條件 按類型查找 f文件 d目錄 b塊設備 c字符設備
find 範圍 -user jimmy 按所屬者查找
find 範圍 -size +10K 按大小查找 +大於 -小於
A 命令實例:
15)查找文件內容
grep 在內容中查找含某字符串的行
grep 某字符串(可正則式) /etc/passwd
A 命令實例:
16)查看各命令的幫助手冊
man 命令名 查看命令幫助手冊
A 命令實例:
man pwd
3.文件的權限
命令:
chmod 777 scan_record.js
格式:
chmod 權限數字 文件名
r 讀權限read 4
w 寫權限write 2
x 操作權限execute 1
權限數字對應權限組說明:
總共分為4部分:【文件或文件夾】【owner權限】【group權限】【others權限】
【文件是-,文件夾是d】【r/w/x相加】【r/w/x相加】【r/w/x相加】
Linux檔案的基本權限就有九個,分別是owner/group/others三種身份各有自己的read/write/execute權限。
閱讀更多 樂創物聯LC 的文章