热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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个位置分表表示的含义。

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

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

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

直接通过+r+w+x-r-w-x去修改三个不同的位置的权限,具体如下面这个例子所示。

除此之外我们还可以指定特定的人或者组。

在上面的例子当中我们还使用数组去表示权限,因为不管是那中类型的用户都有三种权限,每一种权限有具有两种状态,有这个权限和没有这个权限。那么每一个位置都可以使用一个二进制位进行表示,当二进制位为1的时候就说明有这个权限,为0的时候就没有这个权限。那么三个二进制位就表示一类用户(作者、组和其他),因此每一个用户的权限我们可以用三个二进制数进行表示,比如在上图当中的chmod 746 hello.c这条命令的输出结果和下图当中是相互对应的,打击可以仔细对照的思考一下。

其他说明

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

硬链接和软链接的主要区别就是,软链接不会影响链接的数量,他只是指向一个文件,而硬链接不一样,他会增加一个文件链接的数量,当我们删除一个文件的时候事实上并不是直接将这个文件从磁盘当中删除,而是将这个文件的链接数减去一,当这个链接数等于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 

对应的信息如下:

  • ls -R 递归列出子目录当中的文件。
  • ls -S 根据文件大小排序
  • ls - t 根据最后一次修改时间排序。
  • ls -r 逆序排列。

到此这篇关于Linux命令学习之原来最简单的ls这么复杂的文章就介绍到这了,更多相关Linux ls命令内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!


推荐阅读
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • Day2列表、字典、集合操作详解
    本文详细介绍了列表、字典、集合的操作方法,包括定义列表、访问列表元素、字符串操作、字典操作、集合操作、文件操作、字符编码与转码等内容。内容详实,适合初学者参考。 ... [详细]
author-avatar
金berends_941
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有