关于linux:Linux命令系列之ls原来最简单的ls这么复杂

5次阅读

共计 3772 个字符,预计需要花费 10 分钟才能阅读完成。

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 逆序排列。

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

关注公众号:一无是处的钻研僧,理解更多计算机(Java、Python、计算机系统根底、算法与数据结构)常识。

正文完
 0