BASH SHELL ls -l 输出了什么

本文深入解析Linux系统的文件和目录权限模型,包括文件类型的识别、权限位的含义、特殊权限的作用及计算默认权限的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载来源:http://blog.itpub.net/29621173/viewspace-1150127/


[root@orser ~]# ls -l install.log

-rw-r--r--. 1 root root 48005 Apr 22 05:38 install.log
再次将上面结果分为7组分别是【-rw-r--r--.】【1】【root 】【root 】【48005 】【Apr 22 05:38】【install.log

【第一组-rw-r--r--.】

第一个字符表示文件类型
d:文件目录
b:块 设备文件
[root@orser ~]# ls -l /dev/sda1
brw-rw----. 1 root disk 8, 1 Apr 25 19:41 /dev/sda1
c:字符设备 文件
[root@orser ~]# ls -l /dev/console 
crw-------. 1 root root 5, 1 Apr 25 19:41 /dev/console
l:连接文件(软连接)
[root@orser ~]# ls -l /dev/fd
lrwxrwxrwx. 1 root root 13 Apr 25 19:41 /dev/fd -> /proc/self/fd
p:管道文件:确切的说是FIFO(先进先出),也可以说是有名管道,跟管道稍有区别
s:套接字文件(不晓得为什么在帮助文档中没有提到)
-:普通文件
【注1】块设备与字符设备:
其最大的区别在于是否可以被随机访问,块设备可以被随机访问,字符设备不可以被随机访问。
【注2】硬链接与软链接:
两者区别在于一个文件分别做硬链接和软链接,当删除原文件时,软链接失效而硬链接依然可用。其次软链接与原文件的inode号不同,而硬链接与原文件的inode号相同。另外硬链接不能跨设备做,而软链接可以
【注3】管道:
管道是一种特殊文件,也可以说是一种特殊的虚拟文件,因为他只是在内存中开辟了一块区域。通过对两个进程的索引节点inode进行关联,使得两个进程间传输。不过管道属于半双工,也就是数据只能流向一个方向。
测试软硬链接的区别
[root@orser orser]# touch link
[root@orser orser]# ln link linkh
[root@orser orser]# ln -s link links
137901 -rw-r--r--. 2 root root 11 Apr 25 23:13 link
137901 -rw-r--r--. 2 root root 11 Apr 25 23:13 linkh
138760 lrwxrwxrwx. 1 root root  4 Apr 25 23:14 links -> link
以上可以看出软链接的inode号与原文件不同,硬链接的inode号与原文件相同
[root@orser orser]# cat link
kkkskdadsf
[root@orser orser]# cat links
kkkskdadsf
[root@orser orser]# cat linkh
kkkskdadsf
[root@orser orser]# rm -f link
[root@orser orser]# cat linkh
kkkskdadsf
[root@orser orser]# cat links
cat: links: No such file or directory
           以上可以得出当原文件被删除时,软链接不可用 ,硬连接可用。
           [root@orser orser]# ln -s /home/text linkss
[root@orser orser]# ls -l
lrwxrwxrwx. 1 root root    10 Apr 26 15:17 linkss -> /home/text
[root@orser orser]# ln /home/text linkd
ln: creating hard link `linkd' => `/home/text': Invalid cross-device link
以上可以看出软链接可以跨设备,而硬链接不能跨设备
2-10权限位
2-4:所属主权限即为谁创建的文件
5-7:所属组权限
8-10:其他人权限
       每一组权限都分为3个字符rwx,r为可读权限对应数字为4,w为可写权限对应数字为2,x为可执行权限对应数字为1。
           rwx所在的位置是不会改变的,有该权限就会显示字符,没有该权限就变成减号(-)
          修改文件权限:chmod
原文件权限
[root@orser orser]# ls -l link
-rw-r--r--. 1 root root 0 Apr 26 15:18 link
为该文件添加拥有者可执行权限
[root@orser orser]# chmod u+x link
[root@orser orser]# ls -l link
-rwxr--r--. 1 root root 0 Apr 26 15:18 link
为该文件添加所属组可写入和可执行权限
[root@orser orser]# chmod g+wx link
[root@orser orser]# ls -l link
-rwxrwxr--. 1 root root 0 Apr 26 15:18 link
为该文件去除其他人可读权限
          [root@orser orser]# chmod o-r link
[root@orser orser]# ls -l link
-rwxrwx---. 1 root root 0 Apr 26 15:18 link
也可以使用数字的方式修改权限
以原始文件为基准为该文件添加其他人可读可写可执行权限
[root@orser orser]# chmod 647 link
[root@orser orser]# ls -l link
-rw-r--rwx. 1 root root 0 Apr 26 15:18 link
将该文件全选还原到原始权限
[root@orser orser]chmod 644 link
[root@orser orser]# ls -l link
-rw-r--r--. 1 root root 0 Apr 26 15:18 link
强制位与冒险位(suid、sgid、stickty)
suid   数字为4
        说明:任何用户在执行拥有suid权限的命令时都会以命令用者的身份拥有                
        添加与去除的方法同添加去除普通选项 
                chmod  u+s  添加suid权限(往命令上添加)
                chmod  u-s  删除suid权限
         【注】suid作用到 可执行文件上,作用到目录上没有意义         
sgid   数字为2
        说明: 任何用户在拥有sgid权限的目录下创建的文件都要继承该目录的组
        添加与删除方法:
                chmod g+s  添加sgid权限
                 chmod g-s  删除suid权限
         【注】 sgid作用到目录上,作用到文件上没有意义,cp过去的文件也会被作用         
sticky    t    数字为1
         说明: 任何用户在拥有t权限的目录下创建的文件,只能该用户删除,其他人无权删除
          添加与去除
                chmod o+t 添加t权限
                chmod o-t 添加t权限
        【注】sticky 作用到目录上,作用在文件上没有意义
强制位与冒险位同样可以使用数字模式添加或去除
添加和去除的方法为在普通数字权限 前加上强制位与冒险位的数字权限。
      例如:chmod   4777 cat
umask默认权限反掩码
当我们在创建文件或者目录的时候都会有一个默认权限,那么这个默认权限是怎么来的,就是通过umask计算得来的,一般root用户的umask值为022,普通用户的umask值为002。那么系统是怎么通过umask计算出创建文件或目录的权限的呢?
1、创建目录
取得777中每一位的二进制码(111 111 111)
      取得umask中每一位的二进制码(000 010 010)
对umask中每一位的二进制码取反(111 101 101)
用777中每一位的二进制码和取反后的umask中每一位的二进制码做与运算(111 101 101)即755.
如果上面的国语繁琐,可以直接使用下列步骤
777=rwxrwxrwx
022=----w--w-
两者相减就是了。
2、创建文件
和创建目录的算法相同,只不过创建文件是用666与umask做运 算。
11位
测试与SELinux的关系
       [root@orser orser]# sestatus
      SELinux status:                 disabled
[root@orser orser]# touch se
[root@orser orser]# ls -l se
-rw-r--r-- 1 root root 0 Apr 26 17:58 se
[root@orser orser]# sestatus
SELinux status:                 enabled
[root@orser orser]# ls -l se
            -rw-r--r--. 1 root  root 0 Apr 2 6 17:58 se
          
经过测试发现当SELinux开启 时创建文件此位会有点出现
当SELinux关闭时创建文件此位不 会出现点,但是当再次开启SELinux时该文件此位置又会出现点。
        
测试与ACL的关系
[root@orser orser]# touch aclt
[root@orser orser]# ls -l aclt 
-rw-r--r--. 1 root root 0 Apr 26 18:33 aclt
[root@orser orser]# setfacl -m user:oracle:--x aclt
[root@orser orser]# ls -l aclt 
-rw-r-xr--+ 1 root root 0 Apr 26 18:33 aclt
经过测试我们发现当此文件设置了acl权限的时候这一位上变成了+号。

综上测试
如果这一位上有点,那只能证明系统开启过SELinux并且是在,或者该文件在开启SELinux之前就已经存在;如果这一位上面是+号那么可以证明是该文件具有acl权限控制
【第二组 1
文件硬链接数。
测试
[root@orser orser]# touch link
[root@orser orser]# ls -l link
-rw-r--r--. 1 root root 0 Apr 26 18:53 link
[root@orser orser]# ln link linkh
[root@orser orser]# ls -l link*
-rw-r--r--. 2 root root 0 Apr 26 18:53 link
-rw-r--r--. 2 root root 0 Apr 26 18:53 linkh
通过测试可以得出,当一个文件创建了硬链接的时候,此位为硬链接个数,同样做硬链接的那个文件此位和此文件相同
【第三组  root 
该文件或目录的拥有者
即哪个用户对此文件或目录有足够的权限,只有拥有者(root除外)能够改变文件的属性,当用户被删除后该位置只显示用户id。
[root@orser orser]# useradd -u 508 -g users testuser
[root@orser orser]# su - testuser
[testuser@orser ~]$ id
uid=508(testuser) gid=100(users) groups=100(users) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[testuser@orser ~]$ touch test
[testuser@orser ~]$ ls -l test
-rw-r--r--. 1 testuser users 0 Apr 26 19:57 test
[root@orser ~]# userdel testuser
[root@orser ~]# ls -l /home/testuser/test 
-rw-r--r--. 1 508 users 0 Apr 26 19:57 /home/testuser/test
508为文件只记录的用户id,由于用户被删除关联不到用户信息所以只能显示本身记录的用户id。用户组也是同样道理
【第四组  root 
该文件或目录属于哪个用户组,道理和用户一样。
【第五组  48005 
文件大小
【第六组  Apr 22 05:38
最后一次修改时间
【第七组  install.log
文件名


参考资料
块设备与字符设备     http://blog.itpub.net/10522540/viewspace-198228/
软硬链接             http://www.cnblogs.com/itech/archive/2009/04/10/1433052.html
管道、FIFO           http://www.ibm.com/developerworks/cn/linux/l-ipc/part1/   
                     http://www.ibm.com/developerworks/cn/linux/l-lpic1-v3-103-4/   
                     http://oss.org.cn/kernel-book/ch07/7.1.1.htm
ACL                  http://www.ibm.com/developerworks/cn/linux/l-acl/   
                     http://linuxguest.blog.51cto.com/195664/124107

在 Android 调试桥(ADB)中,可以通过 `adb shell ls -l` 命令查看设备文件系统的文件列表及其详细信息。该命令继承自 Linux shell,因此它的用法与 Linux 中的 `ls -l` 命令一致,用于显示文件的权限、链接数、所有者、组、文件大小、最后修改时间以及文件名等信息。 ### 命令格式 ```bash adb shell ls -l [选项] [文件或目录] ``` ### 选项说明 - `-l`:以长格式显示文件详细信息。 - `-a`:显示所有文件,包括以 `.` 开头的隐藏文件。 - `-h`:与 `-l` 一起使用时,以易读格式(如 KB、MB)显示文件大小。 - `-R`:递归显示目录下的所有子目录和文件。 - `-t`:按文件修改时间排序,最新的文件显示在前。 - `-r`:反向排序。 ### 示例用法 1. **查看根目录下的文件列表**: ```bash adb shell ls -l / ``` 此命令将列出根目录下的文件和文件夹的详细信息。 2. **查看特定目录下的隐藏文件**: ```bash adb shell ls -la /data/local/tmp ``` 此命令将列出 `/data/local/tmp` 目录下的所有文件,包括隐藏文件。 3. **查看文件大小并以易读格式显示**: ```bash adb shell ls -lh /sdcard/Download ``` 此命令将以易读的格式显示 `/sdcard/Download` 目录下的文件大小。 4. **递归显示目录内容**: ```bash adb shell ls -lR /sdcard ``` 此命令将递归地列出 `/sdcard` 目录下的所有子目录和文件。 5. **按修改时间排序**: ```bash adb shell ls -lt /data/app ``` 此命令将列出 `/data/app` 目录下的文件,并按最后修改时间排序。 ### 输出解析 执行 `ls -l` 命令后,输出的每一行通常包含以下字段: - **文件权限**:例如 `drwxr-xr-x` 表示目录权限,`-rw-r--r--` 表示普通文件权限。 - **链接数**:该文件或目录的硬链接数量。 - **所有者**:文件所属的用户。 - **组**:文件所属的用户组。 - **文件大小**:以字节为单位的文件大小,若使用 `-h` 选项,则以易读格式显示。 - **最后修改时间**:文件最后一次修改的日期和时间。 - **文件名**:文件或目录的名称。 ### 注意事项 - 若设备未连接或未正确识别,需先通过 `adb devices` 确认设备状态。 - 某些系统目录(如 `/system`)可能需要 root 权限才能访问其内容。 - 使用 `adb shell` 进入设备后,可以直接使用 `ls -l` 查看当前目录下的文件列表。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值