ls命令

时间:2022-08-29 21:05:44

ls(list)

命令可以说是Linux下最常用的命令之一

#ls -l;列出文件的详细信息

#ll

以上两个命令一样,ll是ls -l的简写

#ls -al;列出目录下的所有文件,包括以 . 开头的隐藏文件。

#ls -R ;列出所有子目录下的文件

#ls -lh ;列出文件的大小,单位为K

#ls -l | less; 分屏显示,能用pgup,pgdw 翻页,但不能在当前位置退出

#ls usr/bin/*.pl;显示usr/bin目录下的以.pl结尾的文件

#ls -ltr;逆序显示文件,可以测试显示日志

例一:列出/home/peidachang文件夹下的所有文件和目录的详细资料

多个参数可以写在一起,也可以单个的分开写

#ls -l -R /home/peidachang;(#ls -lR /home/peidachang;效果完全一样)

例二:列出当前目录中所有以“t”开头的目录的详细内容,可以使用如下命令:

#ls -l t*

只列出常用的参数:

-a 列出目录下的所有文件,包括以 . 开头的隐含文件。

-l 列出文件的详细信息。

-R 列出所有子目录下的文件。
-d 将目录象文件一样显示,而不是显示其下的文件。
-e 输出时间的全部信息,而不是输出简略信息。
-k 以 k 字节的形式表示文件的大小。
-m 横向输出文件名,并以“,”作分格符。
-p -F 在每个文件名后附上一个字符以说明该文件的类型,“*”表示可执行的普通
文件;“/”表示目录;“@”表示符号链接;“|”表示FIFOs;“=”表示套
接字(sockets)。
-s 在每个文件名后输出该文件的大小。
-A 显示除 “.”和“..”外的所有文件。
-S 以文件大小排序。
-1 一行只输出一个文件。

--color=no 不显示彩色文件名

只列出子目录
1. ls -F | grep /$ 或者 alias sub = "ls -F | grep /$"(linux)
2. ls -l | grep "^d" 或者 ls -lL | grep "^d" (Solaris)

计算当前目录下的文件数和目录数
下面命令可以分别计算当前目录下的文件和目录个数:

#ls -l * |grep "^-"|wc -l ---文件个数

#ls -l * |grep "^d"|wc -l    ---目录个数

计算当前目录下的文件数量

#ls -|*|grep "^-"| wc -|

显示彩色目录列表
打开/etc/bashrc, 加入如下一行:
alias ls="ls --color"
下次启动bash时就可以像在Slackware里那样显示彩色的目录列表了, 其中颜色的含义如下:
1. 蓝色-->目录
2. 绿色-->可执行文件
3. 红色-->压缩文件
4. 浅蓝色-->链接文件
5. 灰色-->其他文件

#ls -tl --time-style=full-iso sshd
#ls -ctl --time-style=long-iso

#ll --time=atime test;查看访问时间

$ll --full-time   //显示完整的时间(年,月,日,星期,时,分,秒)

说明:mtime:文件修改时间

atime:访问时间

ctime:状态时间,权限和属性改了

ls 命令的含义是list显示当前目录中的文件名字。注意不加参数它显示除隐藏文件外的所有文件及目录的名字。

1)ls –a 显示当前目录中的所有文件,包含隐藏文件;注意隐藏文件是在文件名字以“.”(英文句号)开头的文件。

# ls –a

.                .gnome2             .nautilus

..               .gnome2_private     oracle_rpm

.bash_profile    .gtkrc-1.2-gnome2   tnsnames.ora

.bashrc          .ICEauthority       types.h

2)ls –l 显示文件及其详细信息。

# ls –l

total 5

-rw-r--r--    1 root     root         1668 Oct 3 2007 anaconda-ks.cfg

drwxr-xr-x    2 root     root         4096 Nov 6 00:04 aa

显示的文件详细信息分别代表什么呢?以上面蓝色部分为例。

total 5 代表当前目录下文件大小的总和为5K(每个目录的大小都按4K算)

drwxr-xr-x 第一个字符有3种情况:“-”表示普通文件,“d”代表目录,“l”代表连接文件,“b”代表设备文件。

后面的9个字符每3个为一组,分别代表文件所有者、文件所有者所在用户组、其它用户对文件拥有的权限。每组中3个字符分别代表读、写、执行的权限,若没有其中的任何一个权限则用“-”表示。执行的权限有两个字符可选“x”代表可执行,“s”代表套接口文件。

紧接着的数字2代表 “aa”这个目录下的目录文件数目(这个数目=隐藏目录数目+普通目录数目)。我们进入“aa”目录用命令 ls –al (为了看到隐藏文件我们加上-a这个参数)

# ls -al

total 8

drwxr-xr-x    2 root    root         4096 Nov 6 00:04 .

drwxr-x---   14 root     root         4096 Nov 6 00:04 ..

(上面的第3行中的2代表当前目录中有子目录2个,即.和..

上面的第4行中的14代表这个目录的上一层目录中有14个子目录。)

再接下来的root代表这个文件(目录)的属主为 用户root

再接下来的root代表这个文件(目录)所属的用户组为 组root

4096 代表文件的大小(字节数),目录的大小总是为4096字节。

Nov 6 00:04 代表文件(目录)的修改时间。

aa代表文件(目录)在名字。

3)文件名颜色的含义

默认色代表普通文件。 例:install.log

绿色代表可执行文件。 例:rc.news

红色代表tar包文件。    例:vim-7.1.tar.bz2

蓝色代表目录文件。    例:aa

水红代表图象文件。    例:Sunset.jpg

青色代表链接文件。    例:rc4.d   (此类文件相当于快捷方式)

黄色代表设备文件。    例:fd0

4)几个比较常用的参数。

-t 按最后修改时间排序。

-S 按文件大小排序。(大写的S)

-r 排序时按倒序。

-h 显示文件大小时增加可读性 (例:1K 234M 2G)

如果这个aa是个普通文件,2就代表这个文件有2个别名(这个文件被人创建了一个硬链接文件)

ls -l 列表信息详解

 

[root@localhost ~]# ls -l

总计 152

-rw-r--r-- 1 root root 2915 08-03 06:16 a

-rw------- 1 root root 1086 07-29 18:35 anaconda-ks.cfg

…………………………………………

第1行:总计(total)

Total后面的数字是指当前目录下所有文件所占用的空间总和。使用ls –lh可查看,也可使用ls –alh查看

第1字段: 文件属性字段

-rw-r--r-- 1 root root 762 07-29 18:19 exit

文件属性字段总共有10个字母组成;第一个字符表示文件类型

-表示该文件是一个普通文件

普通文件分为三种:

文本文件:ASCI码

二进制文件:可执行文件,相当于windows下exe文件

数据文件:处理数据应用

d表示该文件是一个目录,字母"d",是dirtectory(目录)的缩写

注意:目录或者是特殊文件,这个特殊文件存放其他文件或目录的相关信息

l表示该文件是一个链接文件。字母"l"是link(链接)的缩写,类似于windows下的快捷方式,表示只是一个符号文件,实际指向另外一个文件

b的表示块设备文件(block),一般置于/dev目录下,设备文件是普通文件和程序访问硬件设备的入口,是 很特殊的文件。没有文件大小,只有一个主设备号和一个辅设备号。一次传输数据为一整块的被称为块设备,如硬盘、光盘等。最小数据传输单位为一个数据块(通 常一个数据块的大小为512字节)

c表示该文件是一个字符设备文件(character),一般置于/dev目录下,一次传输一个字节的设备被称为字符设备,如键盘、字符终端等,传输数据的最小单位为一个字节

设备文件(linux上的硬件)分为两种

区块设备文件,block,以b打头,主要是磁盘

字符设备文件:以character,以c打头,主要是鼠标,键盘

p表示该文件为管道文件,pipe的缩写。与shell编程有关的文件

s表示该文件为sock文件,sock的缩写,即套接字文件。与shell编程有关的文件

链接文件分为硬链接或符号链接两种。

硬链接:多个指向同一文件。硬链接文件大小完全相同,如有多个硬链接,所链接的文件只是一个文件大小。

同一个文件所有的文件都是等价的,操作系统不区分链接创建的先后顺序,若一个文件存在两个链接,那么除去一个文件还可以通过另外一个文件来访问该文件,也可以除去创建链接时用到的文件,但只要还有一个链接存在,就可通过该连接访问文件。

符号链接(软链接):建立一个独立的文件,这个文件会让数据的读取指向它链接的文件内容。类似windows快捷方式。

第1字段后9个字母表示该文件或目录的权限位。

r表是读 (Read) 、w表示写 (Write) 、x表示执行 (eXecute)

前三个表示文件拥有者的权限,中间三个表示文件所属组拥有的权限,最后三个表示其他用户拥有的权限。

SUID和GUID解析:

s:4;g:2;o:1

4777即rwsrwxrwx。6777即rwsrwsrwx

第2字段:文件硬链接数

-rw-r--r-- 1 root root 762 07-29 18:19 exit

如果一个文件不是目录,此时这一字段表示这个文件所具有的硬链接数

第2字段的值为1,说明文件exit只有exit这一个文件名。即只有一个指向该链接的硬链接。

如果使用ln,做一个指向该文件的硬链接再查看该文件,该文件的第2字段就会变成2

[root@localhost ~]# ln exit aexit

[root@localhost ~]# ls -l

总计 160

-rw-r--r-- 2 root root 762 07-29 18:19 aexit

-rw-r--r-- 2 root root 762 07-29 18:19 exit

此时exit 和aexit称为互为硬链接。同指向一个文件,无论是修改哪一个文件,另一个里也做相应的变化,即同一文件的不同文件名

互为硬链接的文件具有相同的文件节点。

[root@localhost ~]# ls -i aexit exit

162302 aexit 162302 exit

软链接设置格式:

Ln –s 源文件 目标链接文件

# ln -s exit bexit

# ls -l

lrwxrwxrwx 1 root root 4 08-03 08:27 bexit -> exit

-rw-r--r-- 1 root root 762 07-29 18:19 exit

注意:软链接时文件节点号不一样;

[root@localhost ~]# ls -i bexit exit

161765 bexit 162302 exit

如果知道一个文件有多个文件名(链接文件)如何查找他的其他文件名的路径?

使用ls -i 获得其节点号,find查找。

[root@localhost ~]# ls -i /etc/sysconfig/network-scripts/ifcfg-eth0

452946 /etc/sysconfig/network-scripts/ifcfg-eth0       #节点号为 452946

[root@localhost ~]# find /etc -inum 452946

/etc/sysconfig/network-scripts/ifcfg-eth0

第2字段: 链接占用的节点

lrwxrwxrwx 1 root root 4 08-03 08:27 bexit -> exit

该字段文件占用一个节点,属于软链接(符号链接)

如果是目录,则第2字段表示该目录所含子目录的个数

新建空目录,此目录的第二字段就是2,表示该目录下有两个子目录。

因为每一个目录都有一个指向它本身的子目录"." 和指向它上级目录的子目录"..",此默认子目录是隐藏的。

每次在目录下新建一个子目录,该目录第2字段的值就增1,但是新建一个普通文件该字段值不增加。

第3字段:文件(目录)拥有者

lrwxrwxrwx 1 root root 4 08-03 08:27 bexit -> exit

该字段表示该文件拥有者是谁。只有文件的拥有者才具有改动文件属性的权利。root具有改动任何文件属性的权利。对于目录,只有拥有该目录的用户,或者具有写权限的用户才有在目录下创建文件的权利。

如果某一用户被删除,而该用户家目录还存在,ls -l 查看该文件将显示一个代表用户存在前ID号的数字。

创建用户test,将其加入wang用户组,su切换:

[root@localhost ~]# useradd test

[root@localhost ~]# usermod -g wang test #创建用户test,并将其加入到用户组wang中

[root@localhost ~]# su test

[test@localhost root]$ cd /home/test

[test@localhost ~]$ touch testing

[test@localhost ~]$ ls -l testing

-rw-r--r-- 1 test wang 0 08-03 18:02 testing #最后用ls -l 看到第三字段的文件拥有者为test

[test@localhost ~]$ su root                          #删除用户test

[root@localhost ~]# userdel test

[root@localhost ~]# cd /home/test #进入test的家目录,查看刚刚创建的文件testing。

[root@localhost test]# ls -l

总计 4

-rw-r--r-- 1 504 wang 0 08-03 18:02 testing

第三字段变成数字,此数字是原用户test的ID号。因为文件系统对每个文件记录文件所有者的ID,而非用户名。

第4字段:文件(目录)拥有者所在的组

lrwxrwxrwx 1 root root 4 08-03 08:27 bexit -> exit

一个用户可以加入很多个组,但是其中有一个是主组,就是显示在第4字段的名称。

useradd -g指定该用户所在的主组,-G指定其他组

Useradd –g 组名 用户名

第5字段: 文件所占用的空间(以字节为单位)

lrwxrwxrwx 1 root root 4 08-03 08:27 bexit -> exit

第5字段表示文件大小,如果是目录,表示该目录大小。注意是目录本身大小,而非目录及其下面的文件的总大小。

第6字段:文件(目录)最近访问(修改)时间

lrwxrwxrwx 1 root root 4 08-03 08:27 bexit -> exit

可通过touch修改创建时间 # touch exit

把exit创建时间修改当前时间,文件还有最后访问时间,最后修改时间等属性。

可以用ls其它参数显示出来。

第7字段:文件名

lrwxrwxrwx 1 root root 4 08-03 08:27 bexit -> exit

如果是符号链接,会有"->"符号,跟着它指向的文件名