Linux命令系列之ls——原来最简单的ls这么复杂

Linux命令系列之ls——原来最简单的ls这么复杂

ls命令应该是我们最常用的命令之一了,但是我们可能容易忽略那些看起来最简单的东西。

简介

ls命令的使用格式如下

ls [选项] [具体的文件] # [] 表示可选
  • 直接在命令行输入 ls将当前目录下的列出当前目录下的文件和目录。
$ls
LICENSE  README.md  hello.c
  • 也可以指定具体的目录和文件
$ls /
bin   dev  home  lib32  libx32  mnt  proc  run   srv  tmp  var
boot  etc  lib   lib64  media   opt  root  sbin  sys  usr
  • 展示隐藏文件(所谓隐藏文件就是以 .开头的目录或者文件),增加 -a选项。
$ls -a
.  ..  .git  LICENSE  README.md  hello.c # . 表示当前目录 .. 表示上一级目录
  • 展示文件的详细信息。
$ls -al
total 44
drwxr-xr-x 3 root root  4096 Oct  6 04:20 .
drwx------ 1 root root  4096 Oct  7 03:16 ..

drwxr-xr-x 8 root root  4096 Aug 26 15:28 .git
-rw-r--r-- 1 root root 18027 Aug 26 15:28 LICENSE
-rw-r--r-- 1 root root   210 Aug 26 15:28 README.md
-rw-r--r-- 1 root root    72 Aug 26 15:32 hello.c

详细信息说明

我们现在来仔细分析一下 ls输出结果:

第一行 total 44,表示这个目录下面所有的文件的大小总和,单位是 KiB

然后是接下来的每一行,每一行的开头都有10个字符,他们的含义具体如下:

文件类型说明

第一个字符,有的是 d, 有的是 -,在linux系统当中,这第一个字符表示文件的类型,他有如下几种类型:

  • d,表示目录,比如说上面的 .当前目录, ..上一级的目录。
  • -,表示一般的文件,比如说上面的 hello.c.

  • b,表示块设备,比如我们的磁盘就是一种块设备,他们的这个位置都是 b

$ls -al /dev/ | grep sda
brw-rw----  1 root disk      8,   0 Apr 30 23:16 sda
brw-rw----  1 root disk      8,   1 Apr 30 23:16 sda1
brw-rw----  1 root disk      8,   2 Apr 30 23:16 sda2
brw-rw----  1 root disk      8,   3 Apr 30 23:16 sda3
  • l,表示一个符号链接文件,也叫做软链接。比如我们创建一个软链接文件,并且查看它,软链接就相当于windows中的快捷方式,它并不真正的去存储数据,简单说来只是存储来一个指向一个文件的链接。
$ln -s hello.c softlink.c
$ls -al
total 52
drwxr-xr-x 3 root root  4096 Oct  7 03:39 .
drwx------ 1 root root  4096 Oct  7 03:33 ..

drwxr-xr-x 8 root root  4096 Aug 26 15:28 .git
-rw-r--r-- 1 root root 18027 Aug 26 15:28 LICENSE
-rw-r--r-- 1 root root   210 Aug 26 15:28 README.md
-rw-r--r-- 3 root root    72 Aug 26 15:32 copy.c
-rw-r--r-- 3 root root    72 Aug 26 15:32 dcopy.c
-rw-r--r-- 3 root root    72 Aug 26 15:32 hello.c
lrwxrwxrwx 1 root root     7 Oct  7 03:39 softlink.c -> hello.c # 这里就表示是软链接
  • p,表示一个管道,我们在进行多进程通信的时候可能需要使用到这个设备文件。比如我们创建一个具体的管道:
$mkfifo test
$ll
total 52
drwxr-xr-x 3 root root  4096 Oct  7 05:06 ./
drwx------ 1 root root  4096 Oct  7 03:40 ../
drwxr-xr-x 8 root root  4096 Aug 26 15:28 .git/
-rw-r--r-- 1 root root 18027 Aug 26 15:28 LICENSE
-rw-r--r-- 1 root root   210 Aug 26 15:28 README.md
-rw-r--r-- 3 root root    72 Aug 26 15:32 copy.c
-rw-r--r-- 3 root root    72 Aug 26 15:32 dcopy.c
-rw-r--r-- 3 root root    72 Aug 26 15:32 hello.c
lrwxrwxrwx 1 root root     7 Oct  7 03:39 softlink.c -> hello.c
prw-r--r-- 1 root root     0 Oct  7 05:06 test # 这里就是我么你创建的管道
  • s,这个表示一个套接字,用于网络通信。

权限说明

对于后面9个字符来说,是用于表示文件的相关权限的。对于每一种文件来说,它主要有三个权限,读、写和执行,我们很容易理解这三种权限,对于一个文件来说我们当然是想要读和写的,对于有的文件来说我们希望他是可执行的。我们稍后具体具一个例子,我们先来看这个9个位置分表表示的含义。

Linux命令系列之ls——原来最简单的ls这么复杂

在这9个位置的字符当中如果是用 -表示,则说明没有对应的权限,如果是用对应的 r, w, x表示,则说明有对应的权限。这9个字符每三个字符是一组,第一组表示文件的作者的权限,第二组表示作者所在组内的其他人的权限,第三组表示其他人的权限,也就是除了作者和作者所在的组之外的其他人的权限。

Linux命令系列之ls——原来最简单的ls这么复杂

比如在上图当中有一个可执行文件a.out,但是当我们使用chmod命令将他的所有的可执行权限都删掉的时候他就不可以被执行了,程序输出的结果表示没有权限。在没有修改之前,作者、组和其他人的权限为 -rwxr-xr-x,所有的这些人都有可执行的权限。但是当执行命令 chmod -x a.out之后去除了所有人的可执行权限之后,再想执行a.out就会报错了,表示权限不够,如果我们还想执行a.out的话就需要将权限重新加回去:

Linux命令系列之ls——原来最简单的ls这么复杂

上面主要谈到了关于权限的问题,我们现在来好好谈一谈chmod命令,这条命令主要是用来修改文件的权限的,比如上面那样。在chmod当中我们可以有如下的几种方式去修改文件的权限:

  • 直接通过 +r+w+x-r-w-x去修改三个不同的位置的权限,具体如下面这个例子所示。
    Linux命令系列之ls——原来最简单的ls这么复杂
  • 除此之外我们还可以指定特定的人或者组。
    Linux命令系列之ls——原来最简单的ls这么复杂
  • 在上面的例子当中我们还使用数组去表示权限,因为不管是那中类型的用户都有三种权限,每一种权限有具有两种状态,有这个权限和没有这个权限。那么每一个位置都可以使用一个二进制位进行表示,当二进制位为1的时候就说明有这个权限,为0的时候就没有这个权限。那么三个二进制位就表示一类用户(作者、组和其他),因此每一个用户的权限我们可以用三个二进制数进行表示,比如在上图当中的 chmod 746 hello.c这条命令的输出结果和下图当中是相互对应的,打击可以仔细对照的思考一下。
    Linux命令系列之ls——原来最简单的ls这么复杂

其他说明

至此我们已经完成了 ls输出的第一步分析,接下来我们来看第二行,第二行输出的数据是文件的链接的数目。对于目录来说这个链接的数目就是子目录的数目,对于文件来说就是硬链接的数量。对于一个新创建的文件来说硬链接的数目为1,我们可以是使用ln命令去增加一个文件的硬链接的数量,比如下图

Linux命令系列之ls——原来最简单的ls这么复杂

硬链接和软链接的主要区别就是,软链接不会影响链接的数量,他只是指向一个文件,而硬链接不一样,他会增加一个文件链接的数量,当我们删除一个文件的时候事实上并不是直接将这个文件从磁盘当中删除,而是将这个文件的链接数减去一,当这个链接数等于0的时候才会删除这个文件,而删除一个软链接是不会影响链接的数量的,他只是在被发现是软链接的时候去读它指向的那个文件的内容。

第三列和第四列主要是用户名和用户所在的组的组名。第五列是文件的大小,单位是Byte。后面三列是文件上一次修改时间分别对应月、日、分秒,最后一列则是文件名。

彩蛋

  • 我们可以使用stat命令去查看一个文件详细的元数据信息,这些信息是存储在文件的inode信息里面的。
$stat hello.c
  File: hello.c
  Size: 72          Blocks: 8          IO Block: 4096   regular file
Device: 91h/145d    Inode: 1577767     Links: 3
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2022-10-07 05:41:32.685021010 +0000
Modify: 2022-10-07 05:41:27.547021008 +0000
Change: 2022-10-07 05:41:27.552021008 +0000
 Birth: 2022-08-26 15:32:43.726183003 +0000

对应的信息如下:

Linux命令系列之ls——原来最简单的ls这么复杂
  • ls -R 递归列出子目录当中的文件。
  • ls -S 根据文件大小排序
  • ls – t 根据最后一次修改时间排序。
  • ls -r 逆序排列。

以上就是本篇文章的所有内容了,我是 LeHung,我们下期再见!!!更多精彩内容合集可访问项目:https://github.com/Chang-LeHung/CSCore

关注公众号: 一无是处的研究僧,了解更多计算机(Java、Python、计算机系统基础、算法与数据结构)知识。

Original: https://www.cnblogs.com/Chang-LeHung/p/16759950.html
Author: 一无是处的研究僧
Title: Linux命令系列之ls——原来最简单的ls这么复杂

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/712308/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Bug驱动开发探讨

    Bug驱动开发( Bug-driven development)。尽管名字相同高大上,但实际上各位程序猿对它都不陌生。简单地说就是发现bug——消除bug——发现新的bug,这样一…

    技术杂谈 2023年6月1日
    080
  • windows挂载NFS共享

    实验环境: NFS主机(192.168.18.10):CentOS7.0 软件包:nfs-utils、rpcbind; 客户机(192.168.18.41):windows ser…

    技术杂谈 2023年7月24日
    082
  • 博客新域名www.tecchen.tech

    新年祝福 祝新的一年,大朋友实现所有梦想,小朋友健康成长~ 新域名 https://www.tecchen.tech 有效期:10年 旧链接 之前的链接请自行替换为新链接地址,包括…

    技术杂谈 2023年7月11日
    089
  • 长板桥Tank桥、P桥、C桥、B桥哪个好?

    【P桥】非常灵活,适合Dancing,平花中肯,速降的话脚感太虚,很不稳。【C桥】它有44度和50度之分,速降比较稳,适合速降和平花,因为这个桥本来就为速降设计的,对Pu有限制,所…

    技术杂谈 2023年5月31日
    0107
  • 使用Supervisord软件管理go服务进程

    一、介绍Supervisord软件1、什么是Supervisord?Supervisord是一个非常优秀的进程管理工具,使用Python开发。它可以在类UNIX系统的方式让用户来准…

    技术杂谈 2023年5月31日
    082
  • Jenkins Pipeline ample 样板

    pipeline{ environment{ localPath = ‘/Users/jasqia/Desktop’ } agent:any stages{ stage(&quot…

    技术杂谈 2023年5月31日
    078
  • 分布式系统中数据存储方案实践

    数据膨胀的时候,必然放大细节。 一、背景简介 在项目研发的过程中,对于数据存储能力的依赖无处不在,项目初期,相比系统层面的组件选型与框架设计,由于数据体量不大,在存储管理方面通常容…

    技术杂谈 2023年7月23日
    081
  • 《Silverlight 2完美征程》:书稿目录

    内容简介 本书详细介绍了微软下一代富互联网开发技术Silverlight,分为基础篇、进阶篇、高级篇和案例篇四个部分,共22个章节,以Silverlight 2为主要版本从不同的层…

    技术杂谈 2023年5月30日
    070
  • 定时器时间轮算法

    Linux定时器分为低精度定时器和高精度定时器两种类型,内核对其均有实现。本文讨论的是我们在应用程序开发中比较常见的低精度定时器。作为常用的基础组件,定时器常用的几种实现方法包括:…

    技术杂谈 2023年5月31日
    098
  • 【Golang】对接百度翻译API-golang版本sdk代码

    最近为自己的客服系统增加了在线翻译功能 可以把访客任何语种消息翻译为中文 客服消息一键翻译为英文,详细演示效果可以注册唯一客服系统(gofly.v1kf.com),我审核通过后就可…

    技术杂谈 2023年6月1日
    087
  • SpringBoot-shiro

    SpringBoot-shiro 12.1 快速入门 1、导入依赖 org.apache.shiro shiro-core 1.8.0 org.slf4j jcl-over-slf…

    技术杂谈 2023年6月21日
    091
  • 面向对象ooDay9

    同一个对象被造型为不同的类型时,有不同的功能——-所有对象都是多态的(明天总结详细讲) 对象的多态:水、我、你…… 同一类型的引用在…

    技术杂谈 2023年7月11日
    070
  • zz1

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/lexus/p/7891584.htmlAuthor: …

    技术杂谈 2023年5月31日
    067
  • 定制化知识图谱 项目介绍

    宣传网站 http://dingzhitupu.com/ 定制化知识图谱 根据您的业务特性,通过图分析、建模,创建专门适合与您业务逻辑的专有知识图谱 特性介绍 用户不必懂相关技术 …

    技术杂谈 2023年5月31日
    0104
  • 枚举进行位运算 枚举组合z

    public enum MyEnum { MyEnum1 = 1, //0x1 MyEnum2 = 1 << 1, //0x2 MyEnum3 = 1 <<…

    技术杂谈 2023年6月1日
    078
  • 信息安全之弱口令和社工弱口令规律,及其反制措施(第一章)

    本文只用于讨论和学习,由完全原创,若需要转载引用请在先与我联系,若有疑问或者错误的观点也可以评论区发言,谢谢。 本文研究数据来源于:国内网上常见密码字典(China)、中国高校大学…

    技术杂谈 2023年6月21日
    0107
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球