Linux shell--基礎指令
瀏覽Linux文件系統
Linux中最基礎也是最必要的一條指令
cd destination
cd命令可接受單個參數destination,用以指定想切換到的目錄名。如果沒有為cd命令指定目標路徑,它將切換到用戶主目錄。
destination參數可以用兩種方式表示:一種是使用絕對文件路徑,另一種是使用相對文件路徑。
1. 絕對文件路徑
1 xiaoyu@ubuntu:~$ cd /usr/bin 2 xiaoyu@ubuntu:/usr/bin$
pwd命令
pwd命令可以顯示出shell會話的當前目錄,這個目錄被稱作當前工作目錄。pwd命令的用法如下:
1 xiaoyu@ubuntu:/usr/bin$ pwd
2 /usr/bin 3 xiaoyu@ubuntu:/usr/bin$
可以使用絕對路徑文件路徑切換到Linux虛擬目錄結構中的任何一級:
1 xiaoyu@ubuntu:/$ cd sys/power 2 xiaoyu@ubuntu:/sys/power$ pwd
3 /sys/power 4 xiaoyu@ubuntu:/sys/power$
但是如果只是在自己的主目錄中工作,經常使用絕對路徑的話未免太過冗長,例如,若已經位於目錄/home/xiaoyu,在輸入下方這樣的命令切換到Documents目錄就有點繁瑣了
/home/Documents
2. 相對文件路徑
1 xiaoyu@ubuntu:~$ pwd
2 /home/xiaoyu 3 xiaoyu@ubuntu:~$ cd Documents/
4 xiaoyu@ubuntu:~/Documents$ pwd
5 /home/xiaoyu/Documents 6 xiaoyu@ubuntu:~/Documents$
事實上,在實際工程中,使用絕對路徑跟相對路徑都沒啥講究,都會互相結合使用。
返回上一級目錄
返回上一級目錄,我們使用雙點符(..),表示當前目錄的父目錄
雙點符在目錄層級中移動時非常便利。如果正處在主目錄下的Documents目錄中,需要切換到主目錄下的Downloads目錄,可以這么做:
1 xiaoyu@ubuntu:~$ cd Documents 2 xiaoyu@ubuntu:~/Documents$ pwd
3 /home/xiaoyu/Documents 4 xiaoyu@ubuntu:~/Documents$ cd ../Downloads 5 xiaoyu@ubuntu:~/Downloads$ pwd
6 /home/xiaoyu/Downloads 7 xiaoyu@ubuntu:~/Downloads$
文件和目錄列表
要想知道系統中有哪些文件,可以使用列表命令(ls)
基本的列表功能
ls命令最基本的形式會顯示當前目錄下的文件和目錄:
xiaoyu@ubuntu:~$ ls Desktop Documents Downloads examples.desktop Music Pictures Public Templates Videos vmware-tools-distrib xiaoyu xiaoyu@ubuntu:~$
ls命令輸出的列表是按字母排序的(按列排序而不是按行來排序)
ls -F,-F參數的ls命令可以輕松區分文件和目錄
1 xiaoyu@ubuntu:~$ ls -F 2 Desktop/ Documents/ Downloads/ examples.desktop Music/ Pictures/ Public/ Templates/ Videos/ vmware-tools-distrib/ xiaoyu/
3 xiaoyu@ubuntu:~$
-F參數在目錄名后面加了正斜線(/),以方便用戶在輸出中分辨,在可執行文件的后面加個*號,嗯,我目錄中暫時沒有可執行文件,以便用戶找出可在系統中運行的文件。
基本的ls命令在某種意義上有點容易讓人誤解。它顯示了當前目錄下的文件和目錄,但並沒有將全部都顯示出來。Linux經常采用隱藏文件來保存配置信息。在Linux上,隱藏文件通常是文件名以點號開始的文件。這些文件並沒有在默認的ls命令輸出中顯示出來,因此我們稱其為隱藏文件。要把隱藏文件和普通文件及目錄一起顯示出來,就得用到-a參數。下面是一個帶有-a參數的ls命令的例子:
1 xiaoyu@ubuntu:~$ pwd
2 /home/xiaoyu 3 xiaoyu@ubuntu:~$ ls -a 4 . .bashrc Desktop examples.desktop .local .profile Videos .xsession-errors 5 .. .cache .dmrc .gconf .mozilla Public vmware-tools-distrib .xsession-errors.old 6 .bash_history .compiz Documents .gnupg Music .sudo_as_admin_successful .Xauthority 7 .bash_logout .config Downloads .ICEauthority Pictures Templates xiaoyu 8 xiaoyu@ubuntu:~$
由於結果太長,我這里就不貼了,建議在目錄層級比較少的目錄下操作
顯示長列表
在基本的輸出列表中,ls命令並未輸出太多每個文件的相關信息。要顯示附加信息,另一個常用的參數是-l。-l參數會產生長列表格式的輸出,包含了目錄中每個文件的更多相關信息。
1 xiaoyu@ubuntu:~$ ls -l 2 total 52
3 drwxr-xr-x 2 xiaoyu xiaoyu 4096 Dec 5 05:15 Desktop 4 drwxr-xr-x 2 xiaoyu xiaoyu 4096 Dec 5 05:15 Documents 5 drwxr-xr-x 2 xiaoyu xiaoyu 4096 Dec 5 05:15 Downloads 6 -rw-r--r-- 1 xiaoyu xiaoyu 8980 Dec 4 07:46 examples.desktop 7 drwxr-xr-x 2 xiaoyu xiaoyu 4096 Dec 5 05:15 Music 8 drwxr-xr-x 2 xiaoyu xiaoyu 4096 Dec 5 05:15 Pictures 9 drwxr-xr-x 2 xiaoyu xiaoyu 4096 Dec 5 05:15 Public 10 drwxr-xr-x 2 xiaoyu xiaoyu 4096 Dec 5 05:15 Templates 11 drwxr-xr-x 2 xiaoyu xiaoyu 4096 Dec 5 05:15 Videos 12 drwxr-xr-x 9 xiaoyu xiaoyu 4096 Feb 20 2019 vmware-tools-distrib 13 drwxrwxr-x 3 xiaoyu xiaoyu 4096 Dec 11 14:20 xiaoyu 14 xiaoyu@ubuntu:~$
- 文件類型,比如目錄(d)、文件(-)、字符型文件(c)或塊設備(b);
- 文件的權限
- 文件的硬鏈接總數
- 文件屬主的用戶名
- 文件屬組的組名
- 文件的大小(大小以字節為單位)
- 文件的上次修改時間
- 文件名或目錄名
通常我們會ls -a -l -F一起使用,當然這樣寫很復雜,可以直接這么寫ls -alF
過濾輸出列表
1 xiaoyu@ubuntu:~/xiaoyu$ ls -l my_file 2 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 14:41 my_file 3 xiaoyu@ubuntu:~/xiaoyu$
- 問號(?)代表一個字符:
- 星號(*)代表零個或多個字符
1 xiaoyu@ubuntu:~/xiaoyu$ ls -l my_f?le 2 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 14:43 my_fale 3 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 14:41 my_file 4 xiaoyu@ubuntu:~/xiaoyu$
其中,過濾器my_f?le與目錄中的兩個文件匹配,類似的,型號可匹配零個或多個字符。
1 xiaoyu@ubuntu:~/xiaoyu$ ls -l my_*
2 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 14:43 my_fale 3 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 14:41 my_file 4 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 14:44 my_file2 5 xiaoyu@ubuntu:~/xiaoyu$
使用星號找到了三個名字以my開頭的文件,和問號一樣,你可以把星號放在過濾器中的任意位置
1 xiaoyu@ubuntu:~/xiaoyu$ ls -l my_f*le 2 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 14:43 my_fale 3 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 14:41 my_file 4 xiaoyu@ubuntu:~/xiaoyu$
1 xiaoyu@ubuntu:~/xiaoyu$ ls -l my_f[ai]le 2 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 14:43 my_fale 3 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 14:41 my_file 4 xiaoyu@ubuntu:~/xiaoyu$
1 xiaoyu@ubuntu:~/xiaoyu$ ls -l my_f[a-z]le 2 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 14:43 my_fale 3 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 14:41 my_file 4 xiaoyu@ubuntu:~/xiaoyu$
1 xiaoyu@ubuntu:~/xiaoyu$ ls -l my_f[!a]le 2 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 14:41 my_file
注意:以上的(*)(?)([aj])([a-z])(!)不僅僅是在ls中有用,在linux需要用到過濾的地方,這幾種方法都是十分常見有效的
處理文件
創建文件
我們總會時不時地遇到要創建空文件的情況。例如,有時應用程序希望在它們寫入數據之前,某個日志文件已經存在,這時,可以用touch命令輕松創建空文件。
1 xiaoyu@ubuntu:~/xiaoyu$ touch test_one 2 xiaoyu@ubuntu:~/xiaoyu$ ls -l test_one 3 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 15:03 test_one 4 xiaoyu@ubuntu:~/xiaoyu$ touch test_one 5 xiaoyu@ubuntu:~/xiaoyu$ ls -l test_one 6 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 15:04 test_one 7 xiaoyu@ubuntu:~/xiaoyu$
touch命令創建了你指定的新文件,並將你的用戶名作為文件的屬主。注意,文件的大小是零,因為touch命令只創建了一個空文件。
如果只想改變訪問時間,可以使用-a參數。
xiaoyu@ubuntu:~/xiaoyu$ touch -a test_one
xiaoyu@ubuntu:~/xiaoyu$ ls -l test_one
-rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 15:04 test_one
xiaoyu@ubuntu:~/xiaoyu$ ls -l --time=atime test_one
-rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 15:07 test_one
xiaoyu@ubuntu:~/xiaoyu$
復制文件
xiaoyu@ubuntu:~/xiaoyu$ cp test_one test_two xiaoyu@ubuntu:~/xiaoyu$ ls -l test*
-rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 15:04 test_one -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 15:10 test_two xiaoyu@ubuntu:~/xiaoyu$
1 xiaoyu@ubuntu:~/xiaoyu$ cp -i test_one test_two 2 cp: overwrite 'test_two'? y 3 xiaoyu@ubuntu:~/xiaoyu$
如果不回答y,文件復制將不會繼續。也可以將文件復制到現有目錄中。
1 xiaoyu@ubuntu:~/xiaoyu$ cp -i test_one /home/xiaoyu/Documents/ 2 xiaoyu@ubuntu:~/xiaoyu$ ls -l /home/xiaoyu/Documents/
3 total 0
4 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 15:13 test_one 5 xiaoyu@ubuntu:~/xiaoyu$
上一個例子采用了絕對路徑,不過也可以使用相對路徑
1 xiaoyu@ubuntu:~/xiaoyu$ cp -i test_one ../Documents/
2 cp: overwrite '../Documents/test_one'? y 3 xiaoyu@ubuntu:~/xiaoyu$
之前講過cd ..返回當前目錄的父目錄,單點符(.)就很適合cp命令。記住,單點符表示當前工作目錄。如果需要將一個帶有很長的源對象名的文件復制到當前工作目錄中時,單點符能夠簡化該任務
1 xiaoyu@ubuntu:~/xiaoyu$ cp /etc/NetworkManager/NetworkManager.conf . 2 xiaoyu@ubuntu:~/xiaoyu$ ls -l NetworkManager.conf 3 -rw-r--r-- 1 xiaoyu xiaoyu 76 Dec 17 15:33 NetworkManager.conf 4 xiaoyu@ubuntu:~/xiaoyu$
制表鍵自動補全
在使用命令行時,很容易輸錯命令,目錄名或文件名。實際上,對長目錄來說輸錯的概率還是蠻高的,按住Table鍵就可以為你自動補全命令或者目錄名了,這里就不演示了
鏈接文件
- 符號鏈接
- 硬鏈接
符號鏈接就是實實在在的文件,它指向存放在虛擬目錄結構中某個地方的另一個文件。這兩個通過符號鏈接在一起的文件,彼此的內容並不相同。
要為一個文件創建符號鏈接,原始文件必須事先存在。然后可以使用ln命令以及-s選項來創建符號鏈接
1 xiaoyu@ubuntu:~/xiaoyu$ touch data_file 2 xiaoyu@ubuntu:~/xiaoyu$ ls -l data_file 3 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 15:53 data_file 4 xiaoyu@ubuntu:~/xiaoyu$ ln -s data_file sl_data_file 5 xiaoyu@ubuntu:~/xiaoyu$ ls -l *data_file 6 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 15:53 data_file 7 lrwxrwxrwx 1 xiaoyu xiaoyu 9 Dec 17 15:53 sl_data_file -> data_file 8 xiaoyu@ubuntu:~/xiaoyu$
另外還要注意的是,符號鏈接的文件大小與數據文件的文件大小。符號鏈接sl_data_file只有9個字節,而data_file有0個字節。這是因為sl_data_file僅僅只是指向data_file而已。它們的內容並不相同,是兩個完全不同的文件。
1 xiaoyu@ubuntu:~/xiaoyu$ ls -i *data_file 2 2752954 data_file 2752955 sl_data_file 3 xiaoyu@ubuntu:~/xiaoyu$
硬鏈接會創建獨立的虛擬文件,其中包含了原始文件的信息及位置。但是它們從根本上而言是同一個文件。引用硬鏈接文件等同於引用了源文件。要創建硬鏈接,原始文件也必須實現存在,只不過這次使用ln命令時不再需要加入額外的參數了。
1 xiaoyu@ubuntu:~/xiaoyu$ touch code_file 2 xiaoyu@ubuntu:~/xiaoyu$ ls -l code_file 3 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 17 16:12 code_file 4 xiaoyu@ubuntu:~/xiaoyu$ ln code_file hl_code_file 5 xiaoyu@ubuntu:~/xiaoyu$ ls -li *code_file 6 2752979 -rw-rw-r-- 2 xiaoyu xiaoyu 0 Dec 17 16:12 code_file 7 2752979 -rw-rw-r-- 2 xiaoyu xiaoyu 0 Dec 17 16:12 hl_code_file 8 xiaoyu@ubuntu:~/xiaoyu$
注意:只能對處於同一存儲媒體的文件創建硬鏈接。要想在不同存儲媒體的文件之間創建鏈接,只能使用符號鏈接。
重命名文件
1 xiaoyu@ubuntu:~/xiaoyu$ touch fall fell fill full 2 xiaoyu@ubuntu:~/xiaoyu$ ls -li f*ll 3 2752954 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:37 fall 4 2752955 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:37 fell 5 2752979 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:37 fill 6 2755050 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:37 full 7
8
9 xiaoyu@ubuntu:~/xiaoyu$ mv fall fzll 10 xiaoyu@ubuntu:~/xiaoyu$ ls -li f*ll 11 2752955 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:37 fell 12 2752979 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:37 fill 13 2755050 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:37 full 14 2752954 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:37 fzll 15 xiaoyu@ubuntu:~/xiaoyu$
1 xiaoyu@ubuntu:~/xiaoyu$ ls -li /home/xiaoyu/xiaoyu/fzll 2 2752954 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:37 /home/xiaoyu/xiaoyu/fzll 3 xiaoyu@ubuntu:~/xiaoyu$ ls -li /home/xiaoyu/Pictures/
4 total 0
5 xiaoyu@ubuntu:~/xiaoyu$ mv fzll ../Pictures/
6 xiaoyu@ubuntu:~/xiaoyu$ ls -li ../Pictures/
7 total 0
8 2752954 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:37 fzll 9 xiaoyu@ubuntu:~/xiaoyu$ ls -li fzll 10 ls: cannot access 'fzll': No such file or directory 11 xiaoyu@ubuntu:~/xiaoyu$
1 xiaoyu@ubuntu:~/xiaoyu$ mv ../Pictures/fzll ./fall 2 xiaoyu@ubuntu:~/xiaoyu$ ls -li ../Pictures/fzll 3 ls: cannot access '../Pictures/fzll': No such file or directory 4 xiaoyu@ubuntu:~/xiaoyu$ ls -li ./fall 5 2752954 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:37 ./fall 6 xiaoyu@ubuntu:~/xiaoyu$
1 xiaoyu@ubuntu:~/my_directory$ touch 1.sh 2.sh 3.sh 4.sh
2 xiaoyu@ubuntu:~/my_directory$ cd .. 3 xiaoyu@ubuntu:~$ ls -li my_directory/
4 total 0
5 2755057 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:53 1.sh
6 2755059 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:53 2.sh
7 2755060 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:53 3.sh
8 2755061 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:53 4.sh
9 xiaoyu@ubuntu:~$ mv my_directory/ new_my_directory 10 xiaoyu@ubuntu:~$ ls -li new_my_directory/
11 total 0
12 2755057 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:53 1.sh
13 2755059 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:53 2.sh
14 2755060 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:53 3.sh
15 2755061 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 13:53 4.sh
16 xiaoyu@ubuntu:~$ ls -li my_directory 17 ls: cannot access 'my_directory': No such file or directory 18 xiaoyu@ubuntu:~$
刪除文件
1 xiaoyu@ubuntu:~/xiaoyu$ rm -i fall 2 rm: remove regular empty file 'fall'? y 3 xiaoyu@ubuntu:~/xiaoyu$ ls -li fall 4 ls: cannot access 'fall': No such file or directory 5 xiaoyu@ubuntu:~/xiaoyu$
注意:-i參數提示你是不是要真的刪除該文件。bash shell中滅有回收站或垃圾箱,文件一旦刪除,就無法再找回。因此,在使用rm命令時,要養成總是加入-i參數的好習慣。
也可以使用通配符刪除成組的文件。別忘了使用-i選項保護好自己的文件。
1 xiaoyu@ubuntu:~/xiaoyu$ rm -i f*ll 2 rm: remove regular empty file 'fell'? y 3 rm: remove regular empty file 'fill'? y 4 rm: remove regular empty file 'full'? y 5 xiaoyu@ubuntu:~/xiaoyu$ ls -al f*ll 6 ls: cannot access 'f*ll': No such file or directory 7 xiaoyu@ubuntu:~/xiaoyu$
rm命令的另外一個特性是,如果要刪除很多文件且不受提示符的打擾,可以用-f參數強制刪除,小心為妙!
處理目錄
創建目錄
1 xiaoyu@ubuntu:~/xiaoyu$ mkdir one_dir 2 xiaoyu@ubuntu:~/xiaoyu$ ls -ld one_dir/
3 drwxrwxr-x 2 xiaoyu xiaoyu 4096 Dec 18 14:09 one_dir/
4 xiaoyu@ubuntu:~/xiaoyu$
1 xiaoyu@ubuntu:~/xiaoyu$ mkdir two_dir/sub_dir/under_dir 2 mkdir: cannot create directory ‘two_dir/sub_dir/under_dir’: No such file or directory 3 xiaoyu@ubuntu:~/xiaoyu$
要想同時創建多個目錄和子目錄,需要加入-p參數:
1 xiaoyu@ubuntu:~/xiaoyu$ mkdir -p two_dir/sub_dir/under_dir 2 xiaoyu@ubuntu:~/xiaoyu$ ls -R two_dir/
3 two_dir/: 4 sub_dir 5
6 two_dir/sub_dir: 7 under_dir 8
9 two_dir/sub_dir/under_dir: 10 xiaoyu@ubuntu:~/xiaoyu$
mkdir參數 | 參數代表的意義 |
-m, --mode=MODE |
設置文件模式(在chmod中),而不是a=rwx - umask |
-p, --parents | 沒有錯誤,如果存在,使父目錄需要 |
-v, --verbose |
|
刪除目錄
1 xiaoyu@ubuntu:~/xiaoyu$ touch one_dir/my_file 2 xiaoyu@ubuntu:~/xiaoyu$ ls -li one_dir/
3 total 0
4 2755062 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 14:26 my_file 5 xiaoyu@ubuntu:~/xiaoyu$ rmdir one_dir/
6 rmdir: failed to remove 'one_dir/': Directory not empty 7 xiaoyu@ubuntu:~/xiaoyu$
1 xiaoyu@ubuntu:~/xiaoyu$ rm -i one_dir/my_file 2 rm: remove regular empty file 'one_dir/my_file'? y 3 xiaoyu@ubuntu:~/xiaoyu$ rmdir one_dir/
4 xiaoyu@ubuntu:~/xiaoyu$ ls -ld one_dir 5 ls: cannot access 'one_dir': No such file or directory
1 xiaoyu@ubuntu:~/xiaoyu$ rm -ri two_dir/
2 rm: descend into directory 'two_dir/'? y 3 rm: descend into directory 'two_dir/sub_dir'? y 4 rm: remove directory 'two_dir/sub_dir/under_dir'? y 5 rm: remove directory 'two_dir/sub_dir'? y 6 rm: remove directory 'two_dir/'? y 7 xiaoyu@ubuntu:~/xiaoyu$ ls -l two_dir 8 ls: cannot access 'two_dir': No such file or directory 9 xiaoyu@ubuntu:~/xiaoyu$
查看文件內容
查看文件類型
1 xiaoyu@ubuntu:~/xiaoyu$ ls -al . 2 total 16
3 drwxrwxr-x 3 xiaoyu xiaoyu 4096 Dec 18 14:41 . 4 drwxr-xr-x 20 xiaoyu xiaoyu 4096 Dec 18 13:54 .. 5 drwxrwxr-x 2 xiaoyu xiaoyu 4096 Dec 18 14:41 my_dir 6 -rw-rw-r-- 1 xiaoyu xiaoyu 0 Dec 18 14:39 one_file 7 -rw-rw-r-- 1 xiaoyu xiaoyu 11 Dec 18 14:41 shell.sh
8 xiaoyu@ubuntu:~/xiaoyu$ file my_dir/
9 my_dir/: directory 10 xiaoyu@ubuntu:~/xiaoyu$ file one_file 11 one_file: empty 12 xiaoyu@ubuntu:~/xiaoyu$ file shell.sh
13 shell.sh: ASCII text 14 xiaoyu@ubuntu:~/xiaoyu$
查看整個文件
如果手頭有一個很大的文本文件,你可能會想看看里面是什么內容。在Linux上有3個不同的命令可以完成這個任務。
1. cat命令
cat命令是顯示文本文件中所有數據的得力工具。
1 $ cat test1 2 hello 3 This is a test file. 4 That we'll use to test the cat command.
5 $
沒什么特別的,就是文本文件的內容而已。這里還有一些可以和cat命令一起用的參數,可能對你有所幫助。
-n參數會給所有的行加上行號。
$ cat -n test1
1 hello
2
3 This is a test file.
4
5
6 That we'll use to test the cat command.
$
這個功能在檢查腳本時很有用。如果只想給有文本的行加上行號,可以用-b參數。
$ cat -b test1 1 hello 2 This is a test file. 3 That we'll use to test the cat command.
$
最后,如果不想讓制表符出現,可以用-T參數。
1 $ cat -T test1 2 hello 3 This is a test file. 4 That we'll use to^Itest the cat command. 5 $
-T參數會用^I字符組合去替換文中的所有制表符。

3. less命令
從名字上看,它並不像more命令那樣高級。但是,less命令的命名實際上是個文字游戲(從俗語“less is more”得來),它實為more命令的升級版。它提供了一些極為實用的特性,能夠實現在文本文件中前后翻動,而且還有一些高級搜索功能。less命令的操作和more命令基本一樣,一次顯示一屏的文件文本。除了支持和more命令相同的命令集,它還包括更多的選項。
注意: 要想查看less命令所有的可用選項,可以輸入man less瀏覽對應的手冊頁。也可以這樣查看more命令選項的參考資料。
其中一組特性就是less命令能夠識別上下鍵以及上下翻頁鍵(假設你的終端配置正確)。在查看文件內容時,這給了你全面的控制權。
查看部分文件
通常你要查看的數據要么在文本文件的開頭,要么在文本文件的末尾。如果這些數據是在大型文件的起始部分,那你就得等cat或more加載完整個文件之后才能看到。如果數據是在文件的末尾(比如日志文件),那可能需要翻過成千上萬行的文本才能到最后的內容。好在Linux有解決這兩個問題的專用命令。
1. tail命令
tail命令會顯示文件最后幾行的內容(文件的“尾部”)。默認情況下,它會顯示文件的末尾10行。
出於演示的目的,我們創建了一個包含20行文本的文本文件。使用cat命令顯示該文件的全部內容如下:
1 $ cat log_file 2 line1 3 line2 4 line3 5 line4 6 line5 7 Hello World - line 6
8 line7 9 line8 10 line9 11 line10 12 line11 13 Hello again - line 12
14 line13 15 line14 16 line15 17 Sweet - line16 18 line17 19 line18 20 line19 21 Last line - line20 22 $
1 $ tail log_file 2 line11 3 Hello again - line 12
4 line13 5 line14 6 line15 7 Sweet - line16 8 line17 9 line18 10 line19 11 Last line - line20 12 $
1 $ head log_file 2 line1 3 line2 4 line3 5 line4 6 line5 7 Hello World - line 6
8 line7 9 line8 10 line9 11 line10 12 $
類似於tail命令,它也支持-n參數,這樣就可以指定想要顯示的內容了。這兩個命令都允許你在破折號后面輸入想要顯示的行數:
1 $ head -5 log_file 2 line1 3 line2 4 line3 5 line4 6 line5 7 $