Unix或类Unix系统中的“文件列表”命令“ls”是最基础并且使用的最广泛的命令行中工具之一。它是一个POSIX兼容工具,在GNU基本工具集以及BSD各种变体上都可以使用。“ls”命令可以结合大量的选项来达到想要的结果。
ls 的各选项含义在此有详细介绍:ls 详解
1. 如何列出目录中的文件?
1. 如何列出目录中的文件?
答:linux文件列表命令“ls”就是干这个的。
<code> [root@feiyu ~]# ls </code>
同时,我们也可以使用“echo(回显)”命令与一个通配符(*)参数来列出目录中的所有文件。
<code> [root@feiyu ~]# echo /etc/* </code>
2. 如何只使用echo命令来只列出所有目录?
<code> [root@feiyu ~]# echo */ curl-7.44.0/ GD-2.44/ http/ https/ php/ </code>
3. 怎样列出一个目录中的所有文件, 包括隐藏的以“.”开头的文件?
答:我们需要将“-a”选项与“ls”命令一起使用。
<code> [root@feiyu ~]# ls -a </code>
4. 如何列出目录中除了 “当前目录 .”和“父目录 ..”之外的所有文件,包括隐藏文件?
答: 我们需要将“-A”选项与“ls”命令一起使用
<code> [root@feiyu ~]# ls -A </code>
5. 如何使用长格式打印出当前目录内容?
答: 我们需要将“-l”选项与“ls”命令一起使用。
<code> [root@feiyu ~]# ls -l drwxr-xr-x 5 root root 4096 Sep 24 17:29 http drwxr-xr-x 2 root root 4096 Sep 29 10:34 https drwxr-xr-x 4 root root 4096 Sep 25 22:32 php -rw-r--r-- 1 root root 2266 Sep 29 21:16 ssl.crt -rw-r--r-- 1 root root 1794 Sep 29 21:14 ssl.key -rw-r--r-- 1 root root 1129 Sep 22 19:40 sta.sql </code>
上面的样例中,其输出结果看起来向下面这样。
这里是如何读取输出 :
第1列
第一个字母d意味着内容是目录或者文件。如果是’-‘(减号),这意味着它的内容是文件。当它是l(小写l字符),意味这内容是链接文件。
下面的9个字符是关于文件权限。前3个rwx字符是文件的拥有者的权限,第二组3rwx是文件的所有组的权限,最后的rwx是对其他人访问文件的权限。
第2列 这行告诉我们有多少链接指向这个文件。
第3列 这行告诉我们谁是这个文件/文件夹的所有者。
第4列 这行告诉我们谁是这个文件/文件夹的所有组。
第5列 这行告诉我们这个文件/文件夹的以字节为单位的大小。 目录的大小总是4096字节。
第6列 这告诉我们文件最后的修改时间。
第7列 这告诉我们文件名或者目录名。
6. 假如让你来将目录中的内容以长格式列表打印,并且显示出隐藏的“点文件”,你会如何实现?
答: 我们需要同时将”-a”和”-l”选项与“ls”命令一起使用。
<code> [root@feiyu ~]# ls -la </code>
此外,如果我们不想列出“当前目录”和”父目录”,可以将“-A”和“-l”选项同“ls”命令一起使用。
<code> [root@feiyu ~]# ls -lA </code>
7. 如何找到每个文件的创建者?
答: 我们需要结合 “–author”和 “-l”选项来打印出每个文件的创建者。
<code> [root@feiyu ~]# ls --author -l drwxr-xr-x 5 root root root 4096 Sep 24 17:29 http drwxr-xr-x 2 root root root 4096 Sep 29 10:34 https drwxr-xr-x 4 root root root 4096 Sep 25 22:32 php -rw-r--r-- 1 root root root 2266 Sep 29 21:16 ssl.crt -rw-r--r-- 1 root root root 1794 Sep 29 21:14 ssl.key -rw-r--r-- 1 root root root 1129 Sep 22 19:40 sta.sql </code>
8. 如何对用转义字符打印出非显示字符?
答:我们只需要使用“-b”选项来对非显示字符进行转义打印
<code> [root@feiyu ~]# touch 'a b' [root@feiyu ~]# ls -b a\ b </code>
9. 用指定特定的单位格式来列出文件和目录的大小,你会如何实现?
答: 在此可以同时使用选项“-block-size=scale”和“-l”,但是我们需要用特定的单位如M,K等来替换‘scale’参数。
<code> [root@feiyu ~]# ls --block-size=M -l [root@feiyu ~]# ls --block-size=K -l K = Kilobyte M = Megabyte G = Gigabyte T = Terabyte P = Petabyte E = Exabyte Z = Zettabyte Y = Yottabyte </code>
10. 列出目录中的文件,但是不显示备份文件,即那些文件名以‘~’结尾的文件
答: 选项‘-B’赶来救驾。
<code> [root@feiyu ~]# ls -B </code>
11. 将目录中的所有文件按照名称进行排序,并显示其最后修改时间信息?
答: 为了实现这个需求,我们需要同时将“-c”和”-l”选项与命令一起使用。
<code> [root@feiyu ~]# ls -cl </code>
12. 将目录中的文件按照修改时间进行排序,并显示相关联的信息。
答: 我们需要同时使用3个选项:’-l’,’-t’,’-c’ 来对文件使用修改时间排序,最新的修改时间排在最前。’-t’表示按修改时间进行排序。
<code> [root@feiyu ~]# ls -ltc </code>
13. 如何控制‘ls’命令的输出颜色的有无?
答: 需要使用选项‘–color=parameter’,参数具有三种不同值,“auto(自动)”,“always(一直)”,“never(无色)”。
<code> [root@feiyu ~]# ls --color=never [root@feiyu ~]# ls --color=auto [root@feiyu ~]# ls --color=always </code>
14. 假如只需要列出目录本身,而不是目录的内容,你会如何做?
答:在此“-d”选项就会显得很顺手。
<code> [root@feiyu ~]# ls -d */ curl-7.44.0/ GD-2.44/ http/ https/ php/ </code>
15. 为长格式列表命令”ls -l”创建一个别名“ll”,并将其结果输出到一个文件而不是标准输出中。
答:在上述的这个场景中,我们需要将别名添加到.bashrc文件中,然后使用重定向操作符将输出写入到文件而不是标准输出中。我们将会使用编辑器nano。
<code> [root@feiyu ~]# ls -a [root@feiyu ~]# nano .bashrc [root@feiyu ~]# ll >> ll.txt [root@feiyu ~]# nano ll.txt </code>
16. 假如你想要以长列表的形式列出目录中的内容,但是不打印文件创建者名称以及文件所属组。
<code> [root@feiyu ~]# ls -Gl </code>
-g隐藏了拥有者信息,-G会隐藏组信息。
17. 使用易读格式打印出当前目录中的文件以及文件夹的大小,你会如何做?
这里我们需要使用’-h’选项(人类可阅读的、易读的)同‘-l’或‘-s’选项与ls命令一起使用来得到想要的输出。
<code> [root@feiyu ~]# ls -hl drwxr-xr-x 5 root root 4.0K Sep 24 17:29 http drwxr-xr-x 2 root root 4.0K Sep 29 10:34 https drwxr-xr-x 4 root root 4.0K Sep 25 22:32 php -rw-r--r-- 1 root root 2.3K Sep 29 21:16 ssl.crt -rw-r--r-- 1 root root 1.8K Sep 29 21:14 ssl.key -rw-r--r-- 1 root root 1.2K Sep 22 19:40 sta.sql [root@feiyu ~]# ls -hs [root@feiyu ~]# ls -hs total 78M 2.9M awstats-7.4.tar.gz 59M feiyu-20150925.tar.gz 256K GD-2.44.tar.gz 4.0K php 4.0K sta.sql 4.0K curl-7.44.0 14M feiyu.sql 4.0K http 4.0K ssl.crt 3.3M curl-7.44.0.tar.bz2 4.0K GD-2.44 4.0K https 4.0K ssl.key </code>
注意: ‘-h’选项使用1024(计算机中的标准)的幂,文件或文件夹的大小分别以K,M和G作为输出单位。
18. 假如要你使用逗号‘,’作为分隔符来打印一个目录中的内容,可以吗? 对于长列表形式也可行吗?
当然!linux的ls命令当与其选项‘-m’一起使用时可以在打印目录内容时以逗号‘,’分割。由于逗号分割的内容是水平填充的,ls命令不能在垂直列出内容时使用逗号来分割内容。
<code> [root@feiyu ~]# ls -m awstats-7.4.tar.gz, curl-7.44.0, curl-7.44.0.tar.bz2, feiyu-20150925.tar.gz, feiyu.sql, GD-2.44, GD-2.44.tar.gz, http, https, php, ssl.crt, ssl.key, sta.sql </code>
19. 有办法将目录的内容逆序打印出来吗?
可以!上面的情形可以轻松地通过’-r’选项搞定,该选项将输出顺序倒置。这个选项也可以与‘-l’选项一起使用。
<code> [root@feiyu ~]# ls -lr </code>
20. 如果你被分配一个任务,来递归地打印各个子目录,你会如何应付?注意,只针对子目录而不是文件哦。
小意思!使用“-R”选项就可以轻轻松松拿下,它也可以更进一步地与其他选项如‘-l’和‘-m’选项等组合使用。
<code> [root@feiyu ~]# ls -R </code>
21. 如何按照文件大小对其进行排序?
linux命令行选项’-S’赋予了ls命令这个超能力。按照文件大小从大到小的顺序排序:
<code> [root@feiyu ~]# ls -S </code>
按照文件大小从小到大的顺序排序。
<code> [root@feiyu ~]# ls -Sr </code>
22. 按照一行一个文件列出目录中的内容,并且不带额外信息的方式
选项‘-1(数字1)’在此可以解决这个问题,使用‘-1’选项来使用ls命令可以将目录中的内容按照一行一个文件并且不带额外信息的方式进行输出。
<code> [root@feiyu ~]# ls -1 </code>
23. 现在委派给你一个任务,你必须将目录中的内容输出到终端而且需要使用双引号引起来,你会如何做?
有一个选项‘-Q’会将ls命令的输出内容用双引号引起来。
<code> [root@feiyu ~]# ls -Q "awstats-7.4.tar.gz" "feiyu-20150925.tar.gz" "GD-2.44.tar.gz" "php" "sta.sql" "curl-7.44.0" "feiyu.sql" "http" "ssl.crt" "curl-7.44.0.tar.bz2" "GD-2.44" "https" "ssl.key" </code>
24. 想象一下你正在与一个包含有很多文件和文件夹的目录打交道,你需要使目录名显示在文件名之前,你如何做?
<code> [root@feiyu ~]# ls --group-directories-first curl-7.44.0 http php curl-7.44.0.tar.bz2 feiyu.sql ssl.crt sta.sql GD-2.44 https awstats-7.4.tar.gz feiyu-20150925.tar.gz GD-2.44.tar.gz ssl.key </code>
25. 打印UID和GID
如果你想以数字方式列出项的所有者和所有组(即UID和GID),我们可以带-n选项使用ls命令。这里是个例子。root组的GID是0。
<code> [root@feiyu ~]# ls -n drwxr-xr-x 5 0 0 4096 Sep 24 17:29 http drwxr-xr-x 2 0 0 4096 Sep 29 10:34 https drwxr-xr-x 4 0 0 4096 Sep 25 22:32 php -rw-r--r-- 1 0 0 2266 Sep 29 21:16 ssl.crt -rw-r--r-- 1 0 0 1794 Sep 29 21:14 ssl.key -rw-r--r-- 1 0 0 1129 Sep 22 19:40 sta.sql </code>
26. 增加 / (斜线) 标记目录
要这么做,使用-p选项。
<code> [root@feiyu ~]# ls -p awstats-7.4.tar.gz curl-7.44.0.tar.bz2 feiyu.sql GD-2.44.tar.gz https/ ssl.crt sta.sql curl-7.44.0/ feiyu-20150925.tar.gz GD-2.44/ http/ php/ ssl.key </code>
27. 扩展名排序
你可以使用-X参数或者–sort=extension来通过扩展名来排序(译注:这样对于筛选不同类型的文件很有用)。
<code> [root@feiyu ~]# ls -lX total 79704 drwxr-xr-x 5 root root 4096 Sep 24 17:29 http drwxr-xr-x 2 root root 4096 Sep 29 10:34 https drwxr-xr-x 4 root root 4096 Sep 25 22:32 php drwxr-xr-x 13 1000 1000 4096 Sep 27 21:54 curl-7.44.0 drwxr-xr-x 7 1000 1000 4096 Sep 26 22:12 GD-2.44 -rw-r--r-- 1 root root 3398814 Aug 12 14:12 curl-7.44.0.tar.bz2 -rw-r--r-- 1 root root 2266 Sep 29 21:16 ssl.crt -rw-r--r-- 1 root root 2936102 Jul 14 21:02 awstats-7.4.tar.gz -rw-r--r-- 1 root root 61305645 Sep 25 22:11 feiyu-20150925.tar.gz -rw-r--r-- 1 root root 258396 Sep 26 22:05 GD-2.44.tar.gz -rw-r--r-- 1 root root 1794 Sep 29 21:14 ssl.key -rw-r--r-- 1 root root 13674022 Sep 25 22:06 feiyu.sql -rw-r--r-- 1 root root 1129 Sep 22 19:40 sta.sql </code>
或
<code> [root@feiyu ~]# ls --sort=extension </code>