1. 程式人生 > >Linux 基礎知識(二)

Linux 基礎知識(二)

一、Linux上的檔案管理類命令

命令:ls命令用來顯示目標列表
引數:
-a 顯示所有檔案及目錄 (ls內定將檔名或目錄名稱開頭為"."的視為隱藏檔,不會列出)
-l 除檔名稱外,亦將檔案型態、許可權、擁有者、檔案大小等資訊詳細列出
-r 將檔案以相反次序顯示(原定依英文字母次序)
-t 將檔案依建立時間之先後次序列出
-A 同 -a ,但不列出 "." (目前目錄) 及 ".." (父目錄)
-F 在列出的檔名稱後加一符號;例如可執行檔則加 "*", 目錄則加 "/"
-R 若目錄下有檔案,則以下之檔案亦皆依序列出

演示:
列出目前工作目錄下所有名越新的排越後面 :
ls -ltr

將目錄以下所有目錄及檔案詳細資料列出 :
ls -lR /etc/

列出目前工作目錄下所有檔案及目錄;目錄於名稱後加 "/", 可執行檔於名稱後加 "*" :
ls -AF

命令:cat令用於連線檔案並列印到標準輸出裝置上。
引數:
-n 或 --number:由 1 開始對所有輸出的行數編號。
-b 或 --number-nonblank:和 -n 相似,只不過對於空白行不編號。
-s 或 --squeeze-blank:當遇到有連續兩行以上的空白行,就代換為一行的空白行。
-v 或 --show-nonprinting:使用 ^ 和 M- 符號,除了 LFD 和 TAB 之外。
-E 或 --show-ends : 在每行結束處顯示 $。
-T 或 --show-tabs: 將 TAB 字元顯示為 ^I。
-A, --show-all:等價於 -vET。
-e:等價於"-vE"選項;
-t:等價於"-vT"選項

演示:
textfile1 的文件內容加上行號後
cat -n textfile1

textfile1 和 textfile2 的文件內容加上行號(空白行不加)之後將內容附加到 textfile3 文件裡:
cat -b textfile1 textfile2 >> textfile3

清空 test.txt 文件內容:
cat /dev/null > /test.txt

命令:head 用來顯示檔案的開頭至標準輸出中。
引數:
-c, --bytes=[-]K 顯示每個檔案的前K 位元組內容;如果附加"-"引數,則除了每個檔案的最後K位元組資料外 顯示剩餘全部內容
-n, --lines=[-]K 顯示每個檔案的前K 行內容;如果附加"-"引數,則除了每個檔案的最後K行外 顯示剩餘全部內容
-q, --quiet, 不顯示包含給定檔名的檔案頭
-v, --verbose 總是顯示包含給定檔名的檔案頭

演示:
顯示檔案的前n行
head -n 5 test.txt

輸出檔案除了最後n行的全部內容
head -n -5 test.txt

顯示多個檔案
head test.txt test1.txt

命令tail 可用於檢視檔案的內容

引數:
-f 迴圈讀取
-q 不顯示處理資訊
-v 顯示詳細的處理資訊
-c<數目> 顯示的位元組數
-n<行數> 顯示行數

演示:

要顯示檔案的最後 10 行
tail test.txt

要跟蹤的檔案的增長情況,顯示一直繼續,直到您按下(Ctrl-C)組合鍵停止顯示。
tail -f test.txt

顯示檔案 test.txt 的最後 10 個字元:
tail -c 10 test.txt

more 命令類似 cat ,不過會以一頁一頁的形式顯示,更方便使用者逐頁閱讀,而最基本的指令就是按空白鍵(space)就往下一頁顯示,按 b 鍵就會往回(back)一頁顯示 。

引數:
-num 一次顯示的行數
-d 提示使用者,在畫面下方顯示 [Press space to continue, 'q' to quit.] ,如果使用者按錯鍵,則會顯示 [Press 'h' for instructions.] 而不是 '嗶' 聲
-l 取消遇見特殊字元 ^L(送紙字元)時會暫停的功能
-f 計算行數時,以實際上的行數,而非自動換行過後的行數(有些單行字數太長的會被擴充套件為兩行或兩行以上)
-p 不以捲動的方式顯示每一頁,而是先清除螢幕後再顯示內容
-c 跟 -p 相似,不同的是先顯示內容再清除其他舊資料
-s 當遇到有連續兩行以上的空白行,就代換為一行的空白行
-u 不顯示下引號 (根據環境變數 TERM 指定的 terminal 而有所不同)
+/pattern 在每個文件顯示前搜尋該字串(pattern),然後從該字串之後開始顯示
+num 從第 num 行開始顯示
fileNames 欲顯示內容的文件,可為複數個數

例項
連續兩行以上空白行則以一行空白行顯示。
more -s test.txt

第 20 行開始顯示之文件內容。
more +20 test.txt

常用操作命令
Enter 向下n行,需要定義。預設為1行
Ctrl+F 向下滾動一屏
空格鍵 向下滾動一屏
Ctrl+B 返回上一屏
= 輸出當前行的行號
:f 輸出檔名和當前行的行號
V 呼叫vi編輯器
!命令 呼叫Shell,並執行命令
q 退出more

less 與 more 類似,但使用 less 可以隨意瀏覽檔案,而 more 僅能向前移動,卻不能向後移動,而且 less 在檢視之前不會載入整個檔案。

引數:

-b <緩衝區大小> 設定緩衝區的大小
-e 當檔案顯示結束後,自動離開
-f 強迫開啟特殊檔案,例如外圍裝置代號、目錄和二進位制檔案
-g 只標誌最後搜尋的關鍵詞
-i 忽略搜尋時的大小寫
-m 顯示類似more命令的百分比
-N 顯示每行的行號
-o <檔名> 將less 輸出的內容在指定檔案中儲存起來
-Q 不使用警告音
-s 顯示連續空行為一行
-S 行過長時間將超出部分捨棄
-x <數字> 將"tab"鍵顯示為規定的數字空格
/字串:向下搜尋"字串"的功能
?字串:向上搜尋"字串"的功能
n:重複前一個搜尋(與 / 或 ? 有關)
N:反向重複前一個搜尋(與 / 或 ? 有關)
b 向後翻一頁
d 向後翻半頁
h 顯示幫助介面
Q 退出less 命令
u 向前滾動半頁
y 向前滾動一行
空格鍵 滾動一頁
回車鍵 滾動一行
[pagedown]: 向下翻動一頁
[pageup]: 向上翻動一頁

演示:
檢視檔案
less test.txt

ps檢視程序資訊並通過less分頁顯示
ps -ef |less

瀏覽多個檔案

less test.txt test1.txt
說明:
輸入 :n後,切換到 test1.txt
輸入 :p 後,切換到test.txt

1.全屏導航
ctrl + F - 向前移動一屏
ctrl + B - 向後移動一屏
ctrl + D - 向前移動半屏
ctrl + U - 向後移動半屏
2.單行導航

j - 向前移動一行
k - 向後移動一行
3.其它導航

G - 移動到最後一行
g - 移動到第一行
q / ZZ - 退出 less 命令

命令tac 從最後一行倒序顯示內容,並將所有內容輸出

命令cp主要用於複製檔案或目錄。

引數說明:

-a:此選項通常在複製目錄時使用,它保留連結、檔案屬性,並複製目錄下的所有內容。其作用等於dpR引數組合。
-d:複製時保留連結。這裡所說的連結相當於Windows系統中的快捷方式。
-f:覆蓋已經存在的目標檔案而不給出提示。
-i:與-f選項相反,在覆蓋目標檔案之前給出提示,要求使用者確認是否覆蓋,回答"y"時目標檔案將被覆蓋。
-p:除複製檔案的內容外,還把修改時間和訪問許可權也複製到新檔案中。
-r:若給出的原始檔是一個目錄檔案,此時將複製該目錄下所有的子目錄和檔案。
-l:不復制檔案,只是生成連結檔案。

演示:
將當前目錄"test/"下的所有檔案複製到新目錄"newtest"下
cp –r test/ newtest

命令mv 用來為檔案或目錄改名、或將檔案或目錄移入其它位置。

引數
-i: 若指定目錄已有同名檔案,則先詢問是否覆蓋舊檔案;
-f: 在mv操作要覆蓋某已有的目標檔案時不給任何指示;

命令格式 執行結果
mv 檔名 檔名 將原始檔名改為目標檔名
mv 檔名 目錄名 將檔案移動到目標目錄
mv 目錄名 目錄名 目標目錄已存在,將源目錄
移動到目標目錄;目標
目錄不存在則改名
mv 目錄名 檔名 出錯

演示:
將檔案test 更名為 test1 :
mv test test1

將info目錄放入logs目錄中。注意,如果logs目錄不存在,則該命令將info改名為logs。
mv info/ logs

將/usr/student下的所有檔案和目錄移到當前目錄下,命令列為:
mv /usr/student/* .

命令rm 用於刪除一個檔案或者目錄。

引數:
-i 刪除前逐一詢問確認。
-f 即使原檔案屬性設為唯讀,亦直接刪除,無需逐一確認。
-r 將目錄及以下之檔案亦逐一刪除。

演示:
刪除檔案可以直接使用rm命令,若刪除目錄則必須配合選項"-r",例如:

rm test.txt
rm:是否刪除 一般檔案 "test.txt"? y
rm homework
rm: 無法刪除目錄"homework": 是一個目錄
rm -r homework
rm:是否刪除 目錄 "homework"? y

刪除當前目錄下的所有檔案及目錄
rm -r *

命令touch 用於修改檔案或者目錄的時間屬性,包括存取時間和更改時間。若檔案不存在,系統會建立一個新的檔案。

引數
a 改變檔案的讀取時間記錄。
m 改變檔案的修改時間記錄。
c 假如目的檔案不存在,不會建立新的檔案。與 --no-create 的效果一樣。
f 不使用,是為了與其他 unix 系統的相容性而保留。
r 使用參考檔的時間記錄,與 --file 的效果一樣。
d 設定時間與日期,可以使用各種不同的格式。
t 設定檔案的時間記錄,格式與 date 指令相同。

演示:
修改檔案的時間屬性為當前系統時間
touch test #修改檔案的時間屬性

使用指令"touch"時,如果指定的檔案不存在,則將建立一個新的空白檔案。
touch file #建立一個名為“file”的新的空白檔案

命令stat 用於顯示inode內容。

演示:
檢視 testfile 檔案的inode內容內容
stat testfile

命令file 用於辨識檔案型別。
引數:

-b  列出辨識結果時,不顯示檔名稱。
-c  詳細顯示指令執行過程,便於排錯或分析程式執行的情形。
-f<名稱檔案>  指定名稱檔案,其內容有一個或多個檔名稱時,讓file依序辨識這些檔案,格式為每列一個檔名稱。
-L  直接顯示符號連線所指向的檔案的類別。
-m<魔法數字檔案>  指定魔法數字檔案。
-v  顯示版本資訊。
-z  嘗試去解讀壓縮檔案的內容。

演示:
顯示檔案型別:
file test
test: ASCII text


二、使用命令列展開功能,建立/tmp/a1, /tmp/a2, /tmp/a1/a, /tmp/a1/b,在/tmp目錄下建立目錄:x_y, x_z, q_y, q_z

mkdir -pv /tmp/{a1/{a,b},a2}
mkdir -pv /tmp/{x,q}_{y,z}

三、檔案的元資料資訊有哪些,分別表示什麼含義,如何檢視?如何修改檔案的時間戳資訊。

檔案的資料分兩種:一種元資料,既屬性資料;一種就是資料本身;可使用stat命令檢視檔案的元資料:

stat /test.txt

其中:

file:檔名;

size:檔案大小

block:檔案佔了多少個數據塊

IO Block:檔案所佔資料塊的塊大小

Device:硬體,既說明該檔案在硬碟的那個柱面

Inode:節點號

links:連結

Access(第一個):許可權

Uid:該檔案所屬的屬主

Gid:該檔案所屬的屬組

context:安全上下文

Access(第二個):檔案上一次的訪問時間

Modify:檔案上一次修改的時間

Change:檔案上一次屬性更改的時間

2)修改檔案的時間戳資訊:

可以使用touch命令更改檔案的時間戳:

touch [OPTION]… FILE…

常用選項:

-c: 指定的檔案路徑不存在時不予建立;

-a: 僅修改access time;

-m:僅修改modify time;

-t:使用指定的日期時間,而非現在的時間;[[CC]YY]MMDDhhmm[.ss];

四、在/tmp目錄下建立以tfile開頭,後跟當前日期和時間的檔案,檔名形如:tfile-2016-05-27-09-32-22。
touch tfile-$(date +%F-%H-%M-%S)

五、複製/etc目錄下所有以p開頭,以非數字結尾的檔案或目錄到/tmp/mytest1目錄中

mkdir -pv /tmp/mytest1
cp -R /etc/p[^[:digit:]] /tmp/mytest1
cp -R /etc/p
[^0-9] /tmp/mytest1

六建立使用者tom,指定UID為5001,指定家目錄為/tmp/tom, 指定shell為/bin/zsh, 指定基本組為tom,附加組為jack
groupadd tom
groupadd jack
useradd -u 5001 -d /tmp/tom -s /bin/zsh -g tom -G jack tom