首頁 > 軟體

Linux基礎知識之ls與檔名通配詳解

2020-06-16 17:36:44

ls應該是我們最熟悉的指令之一,通常進入命令列,少不了就要ls一下。

雖然它是一個很基本很常用的命令,不過它的功能也很豐富,熟練使用它可以更加便捷我們看我們想要看到的檔案資訊。

本文ls介紹基於CentOS7.2環境,後面的實驗均在此環境下實現。

ls命令介紹

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
[root@localhost ~]# man ls
LS(1)                            User Commands                           LS(1)
  
NAME
       ls - list directory contents
  
SYNOPSIS
       ls [OPTION]... [FILE]...
  
DESCRIPTION
       List  information  about  the FILEs (the current directory by default).
       Sort entries alphabetically if none of -cftuvSUX nor --sort  is  speci‐
       fied.
  
       Mandatory  arguments  to  long  options are mandatory for short options
       too.
  
       -a, --all
              do not ignore entries starting with .
       -A, --almost-all
              do not list implied . and ..
       -d, --directory
              list directories themselves, not their contents
       -h, --human-readable
              with -l, print sizes in human readable format (e.g., 1K 234M 2G)
       -i, --inode
              print the index number of each file
       -l     use a long listing format
       -r, --reverse
              reverse order while sorting
       -R, --recursive
              list subdirectories recursively
       -S     sort by file size
       -t     sort by modification time, newest first
       -u     with  -lt:  sort by, and show, access time; with -l: show access
              time and sort by name; otherwise: sort by access time

以上的內容有所省略,本文只擷取常用到的11個選項做詳細說明。

-a 顯示所有內容,包括以.開頭的隱藏檔案

1
2
3
4
5
[root@localhost ~]# ls -a /root
.                .bash_logout   .config  .esd_auth             .local       公共  文件
..               .bash_profile  .cshrc   .ICEauthority         .mozilla     模板  下載
anaconda-ks.cfg  .bashrc        CST      initial-setup-ks.cfg  .tcshrc      視訊  音樂
.bash_history    .cache         .dbus    .lesshst              .Xauthority  圖片  桌面

-A 顯示所有內容,但不包括.和..檔案,顯示以.開頭的隱藏檔案

1
2
3
4
5
[root@localhost ~]# ls -A /root/
anaconda-ks.cfg  .bashrc  CST            initial-setup-ks.cfg  .tcshrc      視訊  音樂
.bash_history    .cache   .dbus          .lesshst              .Xauthority  圖片  桌面
.bash_logout     .config  .esd_auth      .local                公共         文件
.bash_profile    .cshrc   .ICEauthority  .mozilla              模板         下載

-d 顯示目錄本身但不顯示目錄下的內容

1
2
3
4
[root@localhost ~]# ls -d /root
/root
[root@localhost ~]# ls /root
anaconda-ks.cfg  CST  initial-setup-ks.cfg  公共  模板  視訊  圖片  文件  下載  音樂  桌面

-h 以人易識別的方式展示檔案大小必須與-l一起使用

-l 檔案長格式,也就是展示檔案詳細資訊

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@localhost ~]# ls /root
anaconda-ks.cfg  CST  initial-setup-ks.cfg  公共  模板  視訊  圖片  文件  下載  音樂  桌面
[root@localhost ~]# ls -l /root
總用量 8
-rw-------. 1 root root 1172 7月  20 00:38 anaconda-ks.cfg
drwxr-xr-x. 2 root root    6 7月  21 18:52 CST
-rw-------. 1 root root 1220 7月  19 16:46 initial-setup-ks.cfg
drwxr-xr-x. 2 root root    6 7月  22 09:52 公共
drwxr-xr-x. 2 root root    6 7月  22 09:52 模板
drwxr-xr-x. 2 root root    6 7月  22 09:52 視訊
drwxr-xr-x. 2 root root    6 7月  22 09:52 圖片
drwxr-xr-x. 2 root root    6 7月  22 09:52 文件
drwxr-xr-x. 2 root root    6 7月  22 09:52 下載
drwxr-xr-x. 2 root root    6 7月  22 09:52 音樂
drwxr-xr-x. 2 root root    6 7月  22 09:52 桌面

上面顯示了加-l與不加-l的卻別,下面看看加-h的好處

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost ~]# ls -lh /root
總用量 8.0K
-rw-------. 1 root root 1.2K 7月  20 00:38 anaconda-ks.cfg
drwxr-xr-x. 2 root root    6 7月  21 18:52 CST
-rw-------. 1 root root 1.2K 7月  19 16:46 initial-setup-ks.cfg
drwxr-xr-x. 2 root root    6 7月  22 09:52 公共
drwxr-xr-x. 2 root root    6 7月  22 09:52 模板
drwxr-xr-x. 2 root root    6 7月  22 09:52 視訊
drwxr-xr-x. 2 root root    6 7月  22 09:52 圖片
drwxr-xr-x. 2 root root    6 7月  22 09:52 文件
drwxr-xr-x. 2 root root    6 7月  22 09:52 下載
drwxr-xr-x. 2 root root    6 7月  22 09:52 音樂
drwxr-xr-x. 2 root root    6 7月  22 09:52 桌面

之前的位元組都自動轉換為kb格式,上面的更方便與我們對於檔案大小有更直觀的認識。

-i 顯示檔案inode號,關於inode我還有一些困惑,等了解足夠清楚在後面會專門為inode寫一篇文字。

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost ~]# ls -il /root
總用量 8
 72664101 -rw-------. 1 root root 1172 7月  20 00:38 anaconda-ks.cfg
 73207816 drwxr-xr-x. 2 root root    6 7月  21 18:52 CST
 72699695 -rw-------. 1 root root 1220 7月  19 16:46 initial-setup-ks.cfg
  2536844 drwxr-xr-x. 2 root root    6 7月  22 09:52 公共
101603105 drwxr-xr-x. 2 root root    6 7月  22 09:52 模板
  2536850 drwxr-xr-x. 2 root root    6 7月  22 09:52 視訊
101603106 drwxr-xr-x. 2 root root    6 7月  22 09:52 圖片
 35973547 drwxr-xr-x. 2 root root    6 7月  22 09:52 文件
 73207845 drwxr-xr-x. 2 root root    6 7月  22 09:52 下載
 73207846 drwxr-xr-x. 2 root root    6 7月  22 09:52 音樂
 34020951 drwxr-xr-x. 2 root root    6 7月  22 09:52 桌面

現在可以簡單的???為inode相當於大公司的員工號,大公司根據員工號精確定位某個人,而它則是準確定位檔案儲存的位置。

-r 逆序顯示檔案

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost ~]# ls -rl /root 
總用量 8
drwxr-xr-x. 2 root root    6 7月  22 09:52 桌面
drwxr-xr-x. 2 root root    6 7月  22 09:52 音樂
drwxr-xr-x. 2 root root    6 7月  22 09:52 下載
drwxr-xr-x. 2 root root    6 7月  22 09:52 文件
drwxr-xr-x. 2 root root    6 7月  22 09:52 圖片
drwxr-xr-x. 2 root root    6 7月  22 09:52 視訊
drwxr-xr-x. 2 root root    6 7月  22 09:52 模板
drwxr-xr-x. 2 root root    6 7月  22 09:52 公共
-rw-------. 1 root root 1220 7月  19 16:46 initial-setup-ks.cfg
drwxr-xr-x. 2 root root    6 7月  21 18:52 CST
-rw-------. 1 root root 1172 7月  20 00:38 anaconda-ks.cfg

-R 遞回顯示目錄內容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
[root@localhost ~]# ls -Rl /root 
/root:
總用量 8
-rw-------. 1 root root 1172 7月  20 00:38 anaconda-ks.cfg
drwxr-xr-x. 2 root root    6 7月  21 18:52 CST
-rw-------. 1 root root 1220 7月  19 16:46 initial-setup-ks.cfg
drwxr-xr-x. 2 root root    6 7月  22 09:52 公共
drwxr-xr-x. 2 root root    6 7月  22 09:52 模板
drwxr-xr-x. 2 root root    6 7月  22 09:52 視訊
drwxr-xr-x. 2 root root    6 7月  22 09:52 圖片
drwxr-xr-x. 2 root root    6 7月  22 09:52 文件
drwxr-xr-x. 2 root root    6 7月  22 09:52 下載
drwxr-xr-x. 2 root root    6 7月  22 09:52 音樂
drwxr-xr-x. 2 root root    6 7月  22 09:52 桌面
  
/root/CST:
總用量 0
  
/root/公共:
總用量 0
  
/root/模板:
總用量 0
  
/root/視訊:
總用量 0
  
/root/圖片:
總用量 0
  
/root/文件:
總用量 0
  
/root/下載:
總用量 0
  
/root/音樂:
總用量 0
  
/root/桌面:
總用量 0

加上遞回後會在顯示主目錄下的內容後在分別顯示各個子目錄下的所有內容,如果子目錄下還有子目錄也依次展開。其目的與-d相反

-S 按檔案大小排序

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost ~]# ls -Sl /root 
總用量 8
-rw-------. 1 root root 1220 7月  19 16:46 initial-setup-ks.cfg
-rw-------. 1 root root 1172 7月  20 00:38 anaconda-ks.cfg
drwxr-xr-x. 2 root root    6 7月  21 18:52 CST
drwxr-xr-x. 2 root root    6 7月  22 09:52 公共
drwxr-xr-x. 2 root root    6 7月  22 09:52 模板
drwxr-xr-x. 2 root root    6 7月  22 09:52 視訊
drwxr-xr-x. 2 root root    6 7月  22 09:52 圖片
drwxr-xr-x. 2 root root    6 7月  22 09:52 文件
drwxr-xr-x. 2 root root    6 7月  22 09:52 下載
drwxr-xr-x. 2 root root    6 7月  22 09:52 音樂
drwxr-xr-x. 2 root root    6 7月  22 09:52 桌面

-t 以mtime時間前後排序,mtime越新越靠前

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost ~]# ls -tl /root
總用量 8
drwxr-xr-x. 2 root root    6 7月  22 09:52 公共
drwxr-xr-x. 2 root root    6 7月  22 09:52 模板
drwxr-xr-x. 2 root root    6 7月  22 09:52 視訊
drwxr-xr-x. 2 root root    6 7月  22 09:52 圖片
drwxr-xr-x. 2 root root    6 7月  22 09:52 文件
drwxr-xr-x. 2 root root    6 7月  22 09:52 下載
drwxr-xr-x. 2 root root    6 7月  22 09:52 音樂
drwxr-xr-x. 2 root root    6 7月  22 09:52 桌面
drwxr-xr-x. 2 root root    6 7月  21 18:52 CST
-rw-------. 1 root root 1172 7月  20 00:38 anaconda-ks.cfg
-rw-------. 1 root root 1220 7月  19 16:46 initial-setup-ks.cfg

-u 必須與-t合用,表示以atime時間前後排序,atime越新越靠前

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost ~]# ls -tul /root
總用量 8
drwxr-xr-x. 2 root root    6 7月  31 09:39 視訊
drwxr-xr-x. 2 root root    6 7月  31 09:39 圖片
drwxr-xr-x. 2 root root    6 7月  31 09:39 音樂
drwxr-xr-x. 2 root root    6 7月  31 09:39 下載
drwxr-xr-x. 2 root root    6 7月  31 09:39 文件
drwxr-xr-x. 2 root root    6 7月  31 09:39 公共
drwxr-xr-x. 2 root root    6 7月  31 09:39 CST
drwxr-xr-x. 2 root root    6 7月  31 09:39 桌面
drwxr-xr-x. 2 root root    6 7月  31 09:39 模板
-rw-------. 1 root root 1220 7月  19 16:46 initial-setup-ks.cfg
-rw-------. 1 root root 1172 7月  19 16:46 anaconda-ks.cfg

 

檔名通配

下面簡要介紹下,檔名的萬用字元

*匹配零個或多個字元               ?匹配任何單個字元            

~ 當前使用者家目錄                  ~username 使用者家目錄

~-前一個工作目錄                  ~+ 當前工作目錄

[0-9]匹配一個數位範圍             [a-z]:大寫和小寫字母

[A-Z]:大寫和小寫字母

[]匹配列表中的任何的一個字元      [^]匹配列表中的所有字元以外的字元

[:digit:]:任意數位,相當於0-9    [:lower:]:任意小寫字母

[:upper:]: 任意大寫字母           [:alpha:]: 任意大小寫字母 

[:alnum:]:任意數位或字母         [:space:]:空格

[:punct:]:標點符號

 

下面通過一些實際例子,感受下檔名通配給我們帶來的一些好處

1、顯示/var目錄下所有以l開頭,以一個小寫字母結尾,且中間出現至少一位數位的檔案或目錄

1
2
[root@localhost ~]# ls /var/l*[0-9]*[[:lower:]]
ls: 無法存取/var/l*[0-9]*[[:lower:]]: 沒有那個檔案或目錄

找不到,那我們自己建立一個符合條件的檔案

1
2
3
[root@localhost ~]# touch /var/lq2e           
[root@localhost ~]# ls -l /var/l*[0-9]*[[:lower:]]
-rw-r--r--. 1 root root 0 7月  31 14:17 /var/lq2e

成功找到

2、顯示/etc目錄下以任意一位數位開頭,且以非數位結尾的檔案或目錄

1
2
3
4
5
[root@localhost ~]# ls /etc/[0-9]*[^0-9]
ls: 無法存取/etc/[0-9]*[^0-9]: 沒有那個檔案或目錄
[root@localhost ~]# touch /etc/3q
[root@localhost ~]# ls /etc/[0-9]*[^0-9]
/etc/3q

初始的/etc/下沒有符合條件的,通過建立一個符合條件的檔案,成功檢索並顯示出來

3、顯示/etc/目錄下以非字母開頭,後面跟了一個字母及其它任意長度任意字元的檔案或目錄

1
2
[root@localhost ~]# ls /etc/[^[:alpha:]][[:alpha:]]*
/etc/3q

成功顯示

4、顯示/etc目錄下所有以m開頭以非數位結尾的檔案或目錄

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@localhost ~]# ls /etc/m*[^0-9]
/etc/machine-id  /etc/makedumpfile.conf.sample  /etc/motd         /etc/my.cnf
/etc/magic       /etc/man_db.conf               /etc/mtab
/etc/mail.rc     /etc/mke2fs.conf               /etc/mtools.conf
  
/etc/maven:
  
/etc/modprobe.d:
mlx4.conf
  
/etc/modules-load.d:
  
/etc/multipath:
  
/etc/my.cnf.d:
mysql-clients.cnf

5、顯示/etc目錄下,所有以.d結尾的檔案或目錄

1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost ~]# ls -d /etc/*.d
/etc/bash_completion.d  /etc/ipsec.d         /etc/profile.d      /etc/rwtab.d
/etc/binfmt.d           /etc/ld.so.conf.d    /etc/rc0.d          /etc/sane.d
/etc/chkconfig.d        /etc/libibverbs.d    /etc/rc1.d          /etc/setuptool.d
/etc/cron.d             /etc/logrotate.d     /etc/rc2.d          /etc/statetab.d
/etc/depmod.d           /etc/modprobe.d      /etc/rc3.d          /etc/sudoers.d
/etc/dnsmasq.d          /etc/modules-load.d  /etc/rc4.d          /etc/sysctl.d
/etc/dracut.conf.d      /etc/my.cnf.d        /etc/rc5.d          /etc/tmpfiles.d
/etc/exports.d          /etc/oddjobd.conf.d  /etc/rc6.d          /etc/usb_modeswitch.d
/etc/gdbinit.d          /etc/pam.d           /etc/rc.d           /etc/xinetd.d
/etc/grub.d             /etc/popt.d          /etc/request-key.d  /etc/yum.repos.d
/etc/init.d             /etc/prelink.conf.d  /etc/rsyslog.d

這裡我們得加上-d不顯示目錄內的內容,否則列出來的東西會非常多。因為我們想要的只是上述結果,所以不相關的內容還是不顯示的好。

6、顯示/etc目錄下,所有.conf結尾,且以m,n,r,p開頭的檔案或目錄

1
2
3
4
5
[root@localhost ~]# ls -d /etc/[mnrp]*.conf
/etc/man_db.conf    /etc/nsswitch.conf  /etc/radvd.conf        /etc/rsyslog.conf
/etc/mke2fs.conf    /etc/numad.conf     /etc/request-key.conf
/etc/mtools.conf    /etc/pbm2ppa.conf   /etc/resolv.conf
/etc/nfsmount.conf  /etc/pnm2ppa.conf   /etc/rsyncd.conf

提示:我們在使用檔案萬用字元查詢自己想看到的內容是最好加上-d因為不加的話,你會看到很多非相關資訊。

看到這相信大家對於ls及檔名通配內容已經有了初步的理解。

在大家看到這時不知有沒有疑惑,在上面的6個例子裡面,顯示字母我用的是[:alpha:]而不是[a-z]、[A-Z]為什麼呢,[a-z]、[A-Z]有什麼區別呢?

下面對這個問題做下說明

我們先建立一個實驗用的目錄及4個檔案

/test1目錄

/test1/a檔案      /test1/A檔案      /test1/Z檔案    /test1/z檔案

1
2
[root@localhost ~]# ls /test1/           
a  A  z  Z

我們先分別ls /test1目錄下的[:alpha:]、[a-z]、[A-Z]看看效果

1
2
3
4
5
6
[root@localhost ~]# ls /test1/[[:alpha:]]
/test1/a  /test1/A  /test1/z  /test1/Z
[root@localhost ~]# ls /test1/[a-z]
/test1/a  /test1/A  /test1/z
[root@localhost ~]# ls /test1/[A-Z]
/test1/A  /test1/z  /test1/Z

我們發現[:alpha:]包含所有大小寫字母,[a-z]則不包含Z,[A-Z]不包含a。雖然[a-z][A-Z]這兩個檔案萬用字元不區分帶小寫,但是其所表示的範圍還是有細微差別,所以在我們不了解其差別的情況下,穩妥起見還是選擇使用[:alpha:]比較好。

本文永久更新連結地址http://www.linuxidc.com/Linux/2016-08/133796.htm


IT145.com E-mail:sddin#qq.com