linux命令笔记之ls

如果要将所有的命令以一篇博客持续更新的方式去展现,将来在查找的时候非常不方便。出于这样的考虑,将来将很多命令都分开记录。
这里,一些基础用法都不做太多说明。主要记录下平时经常用到的一些命令。

命令: ls -[options] [操作对象]

  • 进入目录之后反查当前目录信息
使用参数d即可。
eg: 
hicode@test:~/lab/dir$ ls
1.md  2.md  3.md  4.md  5.md  6.md

想反查看dir目录的信息

hicode@test:~/lab/dir$ ls -ld
drwxrwxr-x 3 hicode hicode 4096 Jul  1 01:17 .

注意的是,目的数不是目录时也可以查询。
证明如下:

hicode@test:~$ ls -ld test
drwxrwxr-x 2 root root 4096 Jun 26 23:54 test
hicode@test:~$ ls -ld music.raw 
-rw------- 1 hicode hicode 1180762112 Dec 24  2013 music.raw
  • 仅列出当前目录下的所有一级子目录

没有直接命令,使用grep 进行筛选,标志是ls 加上 -p后会给目录文件加上/符号

-p, –indicator-style=slash
append / indicator to directories

eg:
hicode@test:~$ ls -lp |grep /
drwxr-xr-x 3 hicode hicode       4096 Dec 27  2013 Desktop/
drwxr-xr-x 2 hicode hicode       4096 Nov  7  2013 Documents/
drwxr-xr-x 2 hicode hicode       4096 Dec 25  2013 Downloads/
drwxrwxr-x 7 hicode hicode       4096 Dec  9  2013 gothonweb/
drwxrwxr-x 3 hicode hicode       4096 Jul  1 01:15 lab/
drwxrwxr-x 4 hicode hicode       4096 Dec 24  2013 labs/

另一种方法是ls -l 显示的记录中,目录都是以d 开头的。

ls -l |grep ^d
  • 仅列出文件

可写成ls -lp | grep [^/]$

原理:即列出所有不以/ 结尾的输出,该输出来自ls -lp

hicode@test:~$ ls -lhpa |grep '[^/]$'
total 1.2G
-rw-------  1 hicode hicode  29K Jul  1 00:49 .bash_history
-rw-r--r--  1 hicode hicode  220 Nov  7  2013 .bash_logout
-rw-r--r--  1 hicode hicode 3.5K Nov  7  2013 .bashrc
-rw-------  1 hicode hicode  32M Dec 25  2013 core
-rw-r--r--  1 hicode hicode   34 Jun 26 23:52 .dmrc
-rw-r--r--  1 hicode hicode 8.3K Nov  7  2013 examples.desktop

或者使用另外的方法:ls -l显示的文件都是以-开头作为文件标志 。因此也可以这么写,这个好理解。

icode@test:~$ ls -l |grep ^-
-rw------- 1 hicode hicode   33206272 Dec 25  2013 core
-rw-r--r-- 1 hicode hicode       8445 Nov  7  2013 examples.desktop
-rw-rw-r-- 1 hicode hicode        279 Aug  1  2005 hosts
-rw-r--r-- 1 hicode hicode         26 Jun 24 22:28 issue
-rw-rw-r-- 1 hicode hicode        176 Jun 24 21:46 log1.txt
-rw-rw-r-- 1 hicode hicode       4617 Jan 12  2009 man.config
  • 查看当前目录下文件的数目,在之前的命令上追加管道命令 |wc -l (WordCount -lineNumber)
hicode@test:~$ ls -l |grep ^- |wc -l  (文件)
15
hicode@test:~$ ls -lp |grep ^d |wc -l   (目录)
19
hicode@test:~$ ls -lp  |wc -l         (所有)
35                                   15+19 not eq 35 (34.)
hicode@test:~$ ls -lp |grep ^d |wc -l
19
hicode@test:~$ ls -lp |grep ^[^d] |wc -l
16
hicode@test:~$ ls -l |grep ^[^d-]       (soga,原来还有一行统计项)
total 1166396              原来还有一行

ls 不能显示目录树结构,下载tree 即可。

sudo apt-get install tree

usage:tree --help

非常好用, 和ls一样,默认不输入路径则为当前目录

hicode@test:~/lab$ tree
.
├── a.txt
├── b.txt
├── c.txt
├── dir
│   ├── 1.md
│   ├── 2.md
│   ├── 3.md
│   ├── 4.md
│   ├── 5.md
│   ├── 6.md
│   └── sadf
├── d.txt
└── e.txt

2 directories, 11 files
  • 仅列出当前目录所有的隐藏文件
ls -d .* |grep ^-

原理:参数.* 为通配符模式,不是正则。默认在当前目录 下通配。. 也可以是隐藏文件夹的标志。
证明如下

hicode@test:~$ ls -ld .*|wc -l
40
hicode@test:~$ ls -ld .*|grep ^d |wc -l
26
hicode@test:~$ ls -ld .*|grep ^- |wc -l
14

既然使用-d 可以查看文件,那么用-a 加上通配符.* 能否起到相同的作用呢

icode@test:~$ ls -la ./.* |wc -l
309

????????????
测试的时候发现加上a 之后,后面的通配符选择的是目录,而不会是文件,它会把所有的.*能匹配上的目录都执行一遍。也就是说这条命令是很多条ls -la .aa ,ls -la .. ,ls -la . 等等 命令的集合。加上a 是命令的集合,加上d 却是当前目录下条目的集合。。有点意思。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值