Linux系统中的“ls -l”命令

ls -l命令的输出颜色及含义

颜色 代表的文件类型
白色 普通文件
蓝色 目录
绿色 可执行文件
红色 压缩文件
浅蓝色 链接文件
红色闪烁 链接文件有问题
黄色 设备文件
灰色 其他文件

ls -l命令信息

例:drwxr-xr-x 2 samite samite 4096 9月 25 09:19 exp
分别代表:文件的类型(d——目录文件 -——文本文件...) 文件的可执行权限 所属组的权限 其它组的权限 硬链接数或目录子目录数 文件拥有者 文件拥有者组 文件大小(byte) 时间 文件名

  • 文件的类型

    • d(dictionary)表示该文件是一个目录或是存放其他文件或目录的相关信息的文件
    • l(link)表示该文件是一个链接文件,类似于windows下的快捷方式
    • b(block)的表示设备文件,一般置于/dev目录下,设备文件是普通文件和程序访问硬件设备的入口,没有文件大小,只有一个主设备号和一个辅设备号,一次传输数据为一整块的被称为块设备,如硬盘、光盘等,最小数据传输单位为一个数据块(通常一个数据块的大小为512字节)
    • c(character)表示该文件是一个字符设备文件,一般置于/dev目录下,一次传输一个字节的设备被称为字符设备,如键盘、字符终端等,传输数据的最小单位为一个字节
    • p表示该文件为命令管道文件,与shell编程有关的文件
    • s表示该文件为sock文件。与shell编程有关的文件
  • 文件的可执行权限
    • -代表无权限r
    • r代表具有可读权限
    • x代表具有可执行权限
    • w代表具有可写权限

用stat模拟实现ls-l功能

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <time.h>
#include <pwd.h>
#include <grp.h>

int main(int argc, char* argv[])
{
    if(argc < 2)
    {
        printf("./a.out filename\n");
        exit(1);
    }

    struct stat st;
    int ret = stat(argv[1], &st);
    if(ret == -1)
    {
        perror("stat");
        exit(1);
    }

    // 存储文件类型和访问权限
    char perms[11] = {0};
    // 判断文件类型
    switch(st.st_mode & S_IFMT)
    {
        case S_IFLNK:
            perms[0] = 'l';
            break;
        case S_IFDIR:
            perms[0] = 'd';
            break;
        case S_IFREG:
            perms[0] = '-';
            break;
        case S_IFBLK:
            perms[0] = 'b';
            break;
        case S_IFCHR:
            perms[0] = 'c';
            break;
        case S_IFSOCK:
            perms[0] = 's';
            break;
        case S_IFIFO:
            perms[0] = 'p';
            break;
        default:
            perms[0] = '?';
            break;
    }
    // 判断文件的访问权限
    // 文件所有者
    perms[1] = (st.st_mode & S_IRUSR) ? 'r' : '-';
    perms[2] = (st.st_mode & S_IWUSR) ? 'w' : '-';
    perms[3] = (st.st_mode & S_IXUSR) ? 'x' : '-';
    // 文件所属组
    perms[4] = (st.st_mode & S_IRGRP) ? 'r' : '-';
    perms[5] = (st.st_mode & S_IWGRP) ? 'w' : '-';
    perms[6] = (st.st_mode & S_IXGRP) ? 'x' : '-';
    // 其他人
    perms[7] = (st.st_mode & S_IROTH) ? 'r' : '-';
    perms[8] = (st.st_mode & S_IWOTH) ? 'w' : '-';
    perms[9] = (st.st_mode & S_IXOTH) ? 'x' : '-';

    // 硬链接计数
    int linkNum = st.st_nlink;
    // 文件所有者
    char* fileUser = getpwuid(st.st_uid)->pw_name;
    // 文件所属组
    char* fileGrp = getgrgid(st.st_gid)->gr_name;
    // 文件大小
    int fileSize = (int)st.st_size;
    // 修改时间
    char* time = ctime(&st.st_mtime);
    char mtime[512] = {0};
    strncpy(mtime, time, strlen(time)-1);

    char buf[1024];
    sprintf(buf, "%s  %d  %s  %s  %d  %s  %s", perms, linkNum, fileUser, fileGrp, fileSize, mtime, argv[1]);

    printf("%s\n", buf);

    return 0;
}

参考博文https://blog.csdn.net/gjggj/article/details/71023605

原文地址:https://www.cnblogs.com/ln-0407/p/11828211.html

时间: 2024-10-07 10:43:07

Linux系统中的“ls -l”命令的相关文章

Linux 系统中 如何配置自定义命令 (Mac本同样适用)

我相信  熟悉Linux的同学们  都有一个烦恼  就是 如果要查看某一个文件的时候   要一级或者多级的去cd切换目录,哪有木有便捷的方法来随意切换呢?  就像快捷键一样这就是在 Linux 系统中配置自定义命令,很简单?? 在文件/root/.bashrc中,添加以下行: alias mycommand = "cd /root" 在终端直接执行mycommand就会执行cd /root ??:    source ~/.bash_profile  这个命令一定要记得执行,这一行命令

linux系统中useradd和usermod命令参数讲解

useradd 命令,添加用户: 参数描述  -c comment 给新用户添加备注 -d home_dir 为主目录指定一个名字(如果不想用登录名作为主目录名的话) -e expire_date 用YYYYY-MM-DD格式指定一个账户过期的日期 -f inactive_days 指定这个帐户密码过期后多少天这个账户被禁用:0表示密码一过期就立即禁用,-1表示禁用这个功能 -g initial_group 指定用户登录组的GID或组名 -G group ... 指定用户除登录组之外所属的一个或

如何在Linux系统中熟练运用KILL命令,纯干货!!!

1.命令格式: kill[参数][进程号] 2.命令功能: 发送指定的信号到相应进程.不指定型号将发送SIGTERM(15)终止指定进程.如 果任无法终止该程序可用"-KILL" 参数,其发送的信号为SIGKILL(9) ,将强 制结束进程,使用ps命令或者jobs 命令可以查看进程号.root用户将影响用户的 进程,非root用户只能影响自己的进程. 3.命令参数: -l 信号,若果不加信号的编号参数,则使用"-l"参数会列出全部的信号名称 -a 当处理当前进程时

Linux系统中最危险的命令你试过吗?

Linux 让人操心的命令 1.rm -rf * man rmNAME       rm - remove files or directoriesOPTIONS       Remove (unlink) the FILE(s). -f, --force              ignore nonexistent files, never prompt -r, -R, --recursive              remove directories and their content

Linux系统中的Device Mapper学习

2016-12-16 15:42 潇湘隐者 阅读(11906) 评论(0) 编辑 收藏 在linux系统中你使用一些命令时(例如nmon.iostat 如下截图所示),有可能会看到一些名字为dm-xx的设备,那么这些设备到底是什么设备呢,跟磁盘有什么关系呢?以前不了解的时候,我也很纳闷. 其实dm是Device Mapper的缩写,Device Mapper 是 Linux 2.6 内核中提供的一种从逻辑设备到物理设备的映射框架机制,在该机制下,用户可以很方便的根据自己的需要制定实现存储资源的管

Linux系统中用户切换

1. Linux系统中用户切换的命令为su,语法为: su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]] 参数说明 -f , –fast:不必读启动文件(如 csh.cshrc 等),仅用于csh或tcsh两种Shell. -l , –login:加了这个参数之后,就好像是重新登陆一样,大部分环境变量(例如HOME.SHELL和USER等)都是以该使用者(USER)为主,并 且工作目录也会改变.如果没有指

Linux 系统中用户切换(su user与 su - user 的区别)

1. Linux系统中用户切换的命令为su,语法为: su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]] 参数说明 -f , –fast:不必读启动文件(如 csh.cshrc 等),仅用于csh或tcsh两种Shell. -l , –login:加了这个参数之后,就好像是重新登陆一样,大部分环境变量(例如HOME.SHELL和USER等)都是以该使用者(USER)为主,并 且工作目录也会改变.如果没有指

Linux 系统中用户切换

1. Linux系统中用户切换的命令为su,语法为: su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]] 参数说明 -f , –fast:不必读启动文件(如 csh.cshrc 等),仅用于csh或tcsh两种Shell. -l , –login:加了这个参数之后,就好像是重新登陆一样,大部分环境变量(例如HOME.SHELL和USER等)都是以该使用者(USER)为主,并 且工作目录也会改变.如果没有指

更换Linux系统中的pip源

更换Linux系统中的pip源 命令如下: mkdir -p ~/.pip/ touch pip.conf vim pip.conf pip.conf编辑内容 [global] index-url=http://mirrors.aliyun.com/pypi/simple/ [install] trusted-host=mirrors.aliyun.com 原文地址:https://www.cnblogs.com/g15009428458/p/12323137.html