LINUX LS命令(LS命令模拟)

合集下载

ls命令详解

ls命令详解

ls命令是Linux常用命令之一,ls命令的作用和windows系统的dir命令类似,下面我们详细介绍一下ls命令的使用方法:ls是英文单词list的简写,其功能为列出目录的内容。

这是用户最常用的一个命令之一,因为用户需要不时地查看某个目录的内容。

该命令类似于DOS下的dir命令。

语法:ls [选项] [目录或是文件]对于每个目录,该命令将列出其中的所有子目录与文件。

对于每个文件,ls将输出其文件名以及所要求的其他信息。

默认情况下,输出条目按字母顺序排序。

当未给出目录名或是文件名时,就显示当前目录的信息。

命令中各选项的含义如下:- a 显示指定目录下所有子目录与文件,包括隐藏文件。

- A 显示指定目录下所有子目录与文件,包括隐藏文件。

但不列出“.”和“..”。

- b 对文件名中的不可显示字符用八进制逃逸字符显示。

- c 按文件的修改时间排序。

- C 分成多列显示各项。

- d 如果参数是目录,只显示其名称而不显示其下的各文件。

往往与l选项一起使用,以得到目录的详细信息。

- f 不排序。

该选项将使lts选项失效,并使aU选项有效。

- F 在目录名后面标记“/”,可执行文件后面标记“*”,符号链接后面标记“@”,管道(或FIFO)后面标记“|”,socket文件后面标记“=”。

- i 在输出的第一列显示文件的i节点号。

- l 以长格式来显示文件的详细信息。

这个选项最常用。

每行列出的信息依次是:文件类型与权限链接数文件属主文件属组文件大小建立或最近修改的时间名字对于符号链接文件,显示的文件名之后有“—〉”和引用文件路径名。

对于设备文件,其“文件大小”字段显示主、次设备号,而不是文件大小。

目录中的总块数显示在长格式列表的开头,其中包含间接块。

- L 若指定的名称为一个符号链接文件,则显示链接所指向的文件。

- m 输出按字符流格式,文件跨页显示,以逗号分开。

- n 输出格式与l选项相同,只不过在输出中文件属主和属组是用相应的UID号和 GID 号来表示,而不是实际的名称。

Linux系统中ls命令详解

Linux系统中ls命令详解

Linux系统中ls命令用法详解ls命令是linux下最常用的命令。

ls命令就是list的缩写,缺省下ls用来打印出当前目录的清单,如果ls指定其他目录,那么就会显示指定目录里的文件及文件夹清单。

通过ls 命令不仅可以查看linux文件夹包含的文件,而且可以查看文件权限(包括目录、文件夹、文件权限),查看目录信息等等,ls 命令在日常的linux操作中用的很多,在此给大家介绍一下ls 命令的使用方法。

一、ls命令使用介绍ls命令格式:ls [选项] [目录名].ls命令功能:列出目标目录中所有的子目录和文件。

ls 命令的参数选项说明:-a, –all 列出目录下的所有文件,包括以 . 开头的隐含文件。

-A, –almost-all 列出除了 . 及以外的任何项目–author 印出每个文件的作者-b, –escape 把文件名中不可输出的字符用反斜杠加字符编号的形式列出。

–block-size=大小块以指定<大小>的字节为单位-B, –ignore-backups 不列出任何以~ 字符结束的项目-c 输出文件的ctime (文件状态最后更改的时间),并根据ctime 排序。

-C 每栏由上至下列出项目–color[=WHEN] 控制是否使用色彩分辨文件。

WHEN 可以是'never'、'always'或'auto'其中之一-d, –directory 将目录象文件一样显示,而不是显示其下的文件。

-D, –dired 产生适合Emacs 的dired 模式使用的结果-f 对输出的文件不进行排序,-aU 选项生效,-lst 选项失效-F, –classify 加上文件类型的指示符号(*/=@| 其中一个)–format=关键字across -x,commas -m,horizontal -x,long -l,single-column -1,verbose -l,vertical -C–full-time 即-l –time-style=full-iso-g 类似-l,但不列出所有者-G, –no-group 不列出任何有关组的信息-h, –human-readable 以容易理解的格式列出文件大小(例如1K 234M 2G)–si 类似-h,但文件大小取1000 的次方而不是1024-H, –dereference-command-line 使用命令列中的符号链接指示的真正目的地–indicator-style=方式指定在每个项目名称后加上指示符号<方式>:none (默认),classify (-F),file-type (-p)-i, –inode 印出每个文件的inode 号-I, –ignore=样式不印出任何符合shell 万用字符<样式>的项目-k 即–block-size=1K,以k 字节的形式表示文件的大小。

linux中ls命令的作用

linux中ls命令的作用

linux中ls命令的作用ls是linux系统中的一个常见命令,用于显示当前目录下的文件和子目录。

ls命令可以给出对文件和目录的一些简单信息,如文件的名字、文件的大小、文件创建时间等。

该命令常常与其他参数结合使用。

常用的参数如下:-a 显示所有文件和子目录(包括隐藏文件)。

-l 以列表方式显示,显示文件的详细信息。

-t 以文件修改时间排序。

-h 以易读方式显示文件的大小。

-i 显示文件的i节点号。

-d 显示目录名,而非目录下的文件。

1.显示文件名如果不加任何参数,则ls命令默认显示当前目录下的所有文件名,包含子目录中的文件名。

例如:$ ls该命令将显示当前目录下的所有文件及子目录。

2.显示目录如果只想查看所在目录的文件夹名,可以加上“-d”参数。

在Linux中,以“.”开头的文件为隐藏文件。

如果要显示所有文件(包括隐藏文件),可以使用“-a”参数。

4.显示文件详细信息使用“-l”参数可以显示文件的详细信息,包括文件的权限、所有者、文件大小、创建时间等等。

-rw-rw-r-- 1 lianghongping lianghongping 558651 Oct 8 10:05 text.txt其中“-rw-rw-r--”代表文件的权限信息,“lianghongping”代表所有者和所属组,“558651”代表文件大小,“Oct 8 10:05”代表文件的创建时间,“text.txt”代表文件名。

在命令行中,文件大小的单位是以字节为单位的。

使用“-h”参数可以以更易读的方式显示文件大小。

$ ls -d */Linux中ls命令的作用就是列出当前目录下的文件名,包含子目录中的文件名,并且还可以通过参数对列出的结果进行排序、筛选等操作。

无论是在命令行下,还是在图形界面下,我们都会经常用到这个命令。

使用ls命令列出Linux终端中的文件和目录

使用ls命令列出Linux终端中的文件和目录

使用ls命令列出Linux终端中的文件和目录在Linux操作系统中,ls命令是非常常用的一个命令,它能够将当前目录下的文件和目录列出来。

在本文中,我将详细介绍ls命令的使用方法,并演示一些常用的选项和参数。

1. 基本用法要使用ls命令列出当前目录下的文件和目录,只需在终端中输入ls,然后按下回车键即可。

ls命令会将结果以列表形式显示,每一行对应一个文件或目录。

示例:```shell$ ls```2. 列出目录如果想要列出指定目录下的文件和目录,只需在ls命令后面跟上目录的路径即可。

路径可以是相对路径或绝对路径。

示例:```shell$ ls /home/user/Documents```3. 列出隐藏文件在Linux系统中,以"."开头的文件被视为隐藏文件,ls命令默认情况下不会列出这些文件。

如果想要显示隐藏文件,可以使用选项"-a"或"--all"。

示例:```shell$ ls -a```4. 列出详细信息ls命令默认以简要形式列出文件和目录,如果想要查看更详细的信息,可以使用选项"-l"或"--long"。

这样,ls命令会以长格式显示每个文件和目录的详细属性。

示例:```shell$ ls -l```5. 列出文件大小如果想要查看文件的大小,可以结合使用选项"-l"和"-h"。

选项"-l"会显示文件的详细信息,"-h"会以人类可读的方式显示文件大小(例如,使用KB、MB、GB等单位)。

示例:```shell$ ls -lh```6. 按时间排序ls命令还可以根据文件的修改时间进行排序。

使用选项"-t",ls命令会将最近修改的文件显示在最前面。

示例:```shell$ ls -lt```7. 列出子目录当遇到目录时,ls命令默认只会列出目录的名称,而不会递归地列出其中的内容。

linux ls命令的用法

linux ls命令的用法

linux ls命令的用法LS(List)命令是Linux操作系统中最基本和最常用的命令之一,用于列出指定目录下的文件和子目录。

它可以帮助用户快速查看目录中的文件列表,并提供一些附加选项以满足用户的不同需求。

本文将详细介绍LS命令的用法,包括常用选项和参数,以及一些实用的技巧和案例。

一、基本用法1. 使用ls命令最简单的方式是在命令行中输入“ls”后回车,此时将会列出当前目录中的文件和子目录。

2. 如果需要查看指定目录下的文件列表,可以在ls命令后面添加目录路径来实现。

例如,“ls /home”将会列出家目录下的文件和子目录。

3. 若想查看隐藏文件(以点开头的文件),可以使用“ls -a”命令。

例如,“ls -a /home”将包括所有文件和子目录,包括隐藏文件。

二、常用选项1. -l:使用长格式(long format)输出,将会显示文件的详细信息,包括权限、所有者、文件大小、修改日期等。

2. -t:按照修改时间倒序排列文件。

使用“ls -lt”命令将根据最后修改时间将文件列表显示在最前面。

3. -r:以相反的顺序显示文件。

使用“ls -r”命令可以实现将文件从最后一个显示到第一个。

4. -S:根据文件大小(以字节为单位)进行排序,最大的文件将会显示在最前面。

使用“ls -S”命令可以实现这一功能。

5. -h:以人类可读的文件大小格式显示,即以具有单位的形式进行显示(如1K、10M等)。

使用“ls -lh”命令可以实现这一功能。

6. -d:列出目录本身,而不是目录下的内容。

使用“ls -d”命令可以只显示目录的信息。

7. color=auto:自动根据文件类型显示不同的颜色。

默认情况下是关闭的,可以通过将其加入到ls命令后开启。

(注:颜色显示需要终端支持)三、常用参数1. -R:递归列出指定目录下的所有子目录和文件。

使用“ls -R”命令可以列出目录树中的所有文件和子目录。

2. -a:显示所有文件和子目录,包括以点开头的隐藏文件。

Linux命令ls-l输出内容含义详解

Linux命令ls-l输出内容含义详解

Linux命令ls-l输出内容含义详解1. ls 只显⽰⽂件名或者⽂件⽬录2. ls -l(这个参数是字母L的⼩写,不是数字1)⽤来查看详细的⽂件资料在某个⽬录下键⼊ls -l可能会显⽰如下信息:⽂件属性(占10个字符空间) ⽂件数拥有者所属的group ⽂件⼤⼩建档⽇期⽂件名drwx------ 2 Guest users 1024 Nov 21 21:05 Mail -rwx--x--x 1 root root 89080 Nov 7 22:41 tar* -rwxr-xr-x 1 root bin 5013 Aug 15 9:32 uname* lrwxrwxrwx 1 root root 4 Nov 24 19:30 zcat->gzip -rwxr-xr-x 1 root bin 308364 Nov 29 7:43 zsh* -rwsr-x--- 1 root bin 9853 Aug 15 5:46 su*-rw-r--r-- 1 Hhf 197121 146 10⽉ 18 17:37 main.m这些显⽰内容的意义: 第⼀个栏位,表⽰⽂件的属性。

Linux的⽂件基本上分为三个属性:可读(r),可写(w),可执⾏(x)。

但是这⾥有⼗个格⼦可以添(具体程序实现时,实际上是⼗个bit位)。

第⼀个⼩格是特殊表⽰格,表⽰⽬录或连结⽂件等等,d表⽰⽬录,例如drwx------;l表⽰连结⽂件,如lrwxrwxrwx;如果是以⼀横“-”表⽰,则表⽰这是⽂件。

其余剩下的格⼦就以每3格为⼀个单位。

因为Linux是多⽤户多任务系统,所以⼀个⽂件可能同时被许多⼈使⽤,所以我们⼀定要设好每个⽂件的权限,其⽂件的权限位置排列顺序是(以-rwxr-xr-x为例): rwx(Owner)r-x(Group)r-x(Other) 这个例⼦表⽰的权限是:使⽤者⾃⼰可读,可写,可执⾏;同⼀组的⽤户可读,不可写,可执⾏;其它⽤户可读,不可写,可执⾏。

Linux基本命令-ls

Linux基本命令-ls

Linux基本命令-lsls作⽤:显⽰⽬标列表,在Linux中是使⽤率较⾼的命令。

ls命令的输出信息可以进⾏彩⾊加亮显⽰,以分区不同类型的⽂件。

参数:-a:显⽰所有档案及⽬录(ls内定将档案名或⽬录名称为“.”的视为影藏,不会列出);-A:显⽰除影藏⽂件“.”和“..”以外的所有⽂件列表;-C:多列显⽰输出结果。

这是默认选项;-l:与“-C”选项功能相反,所有输出信息⽤单列格式输出,不输出为多列;-F:在每个输出项后追加⽂件的类型标识符,具体含义:“*”表⽰具有可执⾏权限的普通⽂件,“/”表⽰⽬录,“@”表⽰符号链接,“|”表⽰命令管道FIFO,“=”表⽰sockets套-b:将⽂件中的不可输出的字符以反斜线“”加字符编码的⽅式输出;-c:与“-lt”选项连⽤时,按照⽂件状态时间排序输出⽬录内容,排序的依据是⽂件的索引节点中的ctime字段。

与“-l”选项连⽤时,则排序的⼀句是⽂件的状态改变时间;-d:仅显⽰⽬录名,⽽不显⽰⽬录下的内容列表。

显⽰符号链接⽂件本⾝,⽽不显⽰其所指向的⽬录列表;-f:此参数的效果和同时指定“aU”参数相同,并关闭“lst”参数的效果;-i:显⽰⽂件索引节点号(inode)。

⼀个索引节点代表⼀个⽂件;--file-type:与“-F”选项的功能相同,但是不显⽰“*”;-k:以KB(千字节)为单位显⽰⽂件⼤⼩;-l:以长格式显⽰⽬录下的内容列表。

输出的信息从左到右依次包括⽂件名,⽂件类型、权限模式、硬连接数、所有者、组、⽂件⼤⼩和⽂件的最后修改时间等;-m:⽤“,”号区隔每个⽂件和⽬录的名称;-n:以⽤户识别码和群组识别码替代其名称;-r:以⽂件名反序排列并输出⽬录内容列表;-s:显⽰⽂件和⽬录的⼤⼩,以区块为单位;-t:⽤⽂件和⽬录的更改时间排序;-L:如果遇到性质为符号链接的⽂件或⽬录,直接列出该链接所指向的原始⽂件或⽬录;-R:递归处理,将指定⽬录下的所有⽂件及⼦⽬录⼀并处理;--full-time:列出完整的⽇期与时间;--color[=WHEN]:使⽤不同的颜⾊⾼亮显⽰不同类型的。

掌握Linux终端命令ls命令用法指南

掌握Linux终端命令ls命令用法指南

掌握Linux终端命令ls命令用法指南为了更好地掌握Linux终端命令的使用,特意为大家整理了关于ls 命令的使用指南。

通过本文的学习,你将能够熟练运用ls命令来查看文件和目录的信息,提高你在Linux系统下的工作效率。

一、ls命令的基本介绍ls命令是Linux系统中常用的命令之一,用于列出指定目录中的文件和子目录。

通过ls命令,我们可以快速查看当前目录下的文件及其相关信息,包括文件名、权限、大小、所有者、修改时间等。

在命令行中输入"ls"即可执行该命令。

二、ls命令的常用参数1. -l:以详细列表的形式显示文件和目录的信息。

每一行代表一个文件或目录,包括文件的权限、所有者、文件大小、修改日期等详细信息。

2. -a:显示所有文件,包括以"."开头的隐藏文件。

3. -h:人性化地显示文件大小,以较易读的单位显示,如KB、MB 等。

4. -r:以相反的顺序显示文件和目录。

5. -S:按文件大小进行排序,从大到小排列。

6. -t:按照修改时间进行排序,最近修改的文件在列表的最前面。

三、ls命令的使用示例1. ls:列出当前目录下的文件和文件夹。

2. ls -l:以详细列表形式显示当前目录下的文件和文件夹。

3. ls -a:显示当前目录下的所有文件和文件夹,包括隐藏文件。

4. ls -l -h:以较易读的单位显示当前目录下文件和文件夹的大小。

5. ls -l -r:以相反的顺序显示当前目录下的文件和文件夹。

6. ls -l -S:按文件大小从大到小的顺序显示当前目录下的文件和文件夹。

7. ls -l -t:按修改时间从近到远的顺序显示当前目录下的文件和文件夹。

四、ls命令的扩展用法1. ls [目录路径]:列出指定目录下的文件和文件夹。

2. ls *.txt:列出当前目录下所有以.txt为后缀名的文件。

3. ls -l | grep "关键词":在当前目录下列出文件和文件夹,并通过关键词进行筛选,只显示包含该关键词的文件和文件夹。

linux的ls命令用途及参数

linux的ls命令用途及参数

linux的ls命令用途及参数
ls是Linux系统中的一个常用命令,用于列出指定目录下的文件和子目录信息。

下面是ls命令的用途及参数:
用途:
1. 列出指定目录下的文件和子目录信息
2. 显示文件的权限、所有者、大小、创建时间等属性信息
3. 可以通过参数控制显示的信息,如只显示文件名、只显示目录、只显示隐藏文件等
4. 可以通过参数控制排序方式,如按文件名排序、按时间排序等
5. 可以通过参数控制显示方式,如以列表形式、以树形结构形式、以逗号分隔形式等
参数:
1. -a:显示所有文件,包括隐藏文件
2. -l:以列表形式显示文件信息,包括权限、所有者、大小、创建时间等属性信息
3. -h:以人类可读的方式显示文件大小,如1K、2M等
4. -r:按文件名反向排序
5. -t:按时间排序,最新修改的文件在最前面
6. -d:显示目录本身的信息,而不是目录下的文件信息
7. -F:在文件名后面加上文件类型标识符,如/表示目录、*表示可执行文件等
8. -i:显示文件的inode号
9. -S:按文件大小排序,文件大小越大越靠前
10. --color:以彩色方式显示文件信息,不同类型的文件显示不同的颜色
以上是ls命令的用途及参数,可以根据不同的需求选择不同的参数来实现不同的功能。

linuxls命令的用法

linuxls命令的用法

linuxls命令的用法ls是Linux中一个非常基础和常用的命令之一,用于列出目录中的文件和子目录。

它的用法非常灵活,可以根据不同的选项和参数来满足不同的需求。

基本用法:1. ls:列出当前目录下的文件和子目录。

2. ls 目录名:列出指定目录下的文件和子目录。

选项:1.-a:显示所有文件,包括隐藏文件和当前目录(.)以及上级目录(..)。

2.-l:以长格式显示文件详细信息,包括文件权限、文件大小、所有者、创建时间等。

3.-h:与-l一起使用,以人类可读的形式显示文件大小。

4.-r:逆序排列,从大到小或从Z到A。

5.-R:递归地显示所有子目录及其文件。

6.-t:以修改时间排序,最新的文件或目录排在前面。

7.-S:以文件大小排序,文件大小越大排在前面。

8.-G:以多行的格式输出结果,每行显示一个文件。

9. -i:显示文件的inode号,唯一标识每个文件。

10.-U:按照文件被创建的顺序进行排序。

参数:1.文件名:列出指定文件的信息。

2.?:匹配任意一个字符。

3.*:匹配任意多个字符。

4.[]:匹配方括号内的任意一个字符。

5.{}:扩展为大括号中的任意一个字符串。

6.~:表示用户的主目录。

7.-:表示标准输入。

示例:1. ls -l:以长格式显示当前目录下的文件和子目录。

2. ls -lh:以人类可读的形式显示当前目录下的文件和子目录。

3. ls -a:显示当前目录下的所有文件和子目录,包括隐藏文件和上级目录。

4. ls -t:按照修改时间的先后顺序显示当前目录下的文件和子目录。

5. ls -R:递归地显示当前目录以及其子目录下的所有文件和子目录。

6. ls -l /path/to/directory:以长格式显示指定目录下的文件和子目录。

7. ls -l file.txt:显示指定文件的详细信息。

8. ls *.txt:显示当前目录下所有以.txt结尾的文件。

9. ls ?abc.txt:显示当前目录下第一个字符是任意的,然后是abc,最后是.txt的文件。

linux ls参数

linux ls参数

linux ls参数摘要:1.Linux ls命令简介2.Linux ls命令的基本参数3.Linux ls命令的扩展参数4.实战示例与应用5.总结与建议正文:Linux操作系统中的ls命令是用来列出目录内容的常用命令,它可以帮助用户了解目录下的文件和子目录信息。

ls命令的语法如下:```ls [选项] [目录]```接下来,我们将详细介绍ls命令的各种参数及其用法。

1.Linux ls命令简介Linux ls命令用于列出目录内容,显示格式可以根据参数进行定制。

默认情况下,ls命令会显示目录中的文件名、大小、权限等信息。

2.Linux ls命令的基本参数(1)-l:以长格式显示目录内容,包括文件权限、所有者、大小等信息。

(2)-a:显示所有文件,包括隐藏文件。

(3)-A:显示所有文件,不包括隐藏文件。

(4)-R:递归列出子目录中的文件。

(5)-r:逆序列出目录内容。

3.Linux ls命令的扩展参数(1)-lh:以人类可读的格式显示文件大小。

(2)--group-directories-first:先列出目录,再列出文件。

(3)--sort=属性:根据指定属性对目录内容进行排序。

(4)--indicator:显示文件类型指示符。

4.实战示例与应用(1)查看当前目录下的所有文件和子目录:`ls -la`(2)查看指定目录下的所有文件和子目录:`ls -la /home/user`(3)以人类可读的格式查看目录大小:`ls -lh`(4)按照大小排序查看目录内容:`ls -lh --sort=size`(5)按照修改时间排序查看目录内容:`ls -lh --sort=time`5.总结与建议Linux ls命令功能强大,通过灵活运用各种参数,可以方便地查看和管理目录内容。

Linux ls命令的20个实用范例

Linux ls命令的20个实用范例

ls命令的20个实用范例来源:Linux中国作者:未知关注我们:Linux中一个基本命令是ls。

没有这个命令,我们会在浏览目录条目时会遇到困难。

这个命令必须被每个学习Linux的人知道。

ls是什么ls命令用于列出文件和目录。

默认上,他会列出当前目录的内容。

带上参数后,我们可以用ls做更多的事情。

这里是一些在日常操作中使用到的ls用法的示例。

1. 不带参数运行ls不带参数运行ls会只列出文件或者目录。

看不到其他信息输出(译注:有时候你发现无参数的ls命令和这里描述的不同,那有可能是你的ls命令实际上带参数的ls别名)。

$ ls2. 使用长清单模式使用-l字符(小写L字符),会显示当前目录内容的长列表。

在接下来的例子中,我们会结合-l参数(这个参数经常使用)来得到更好的结果。

$ ls -l这里是如何读取输出 :第1列第一个字母d意味着内容是目录或者文件。

在上面的截图中,Desktop、 Documents、 Downloads 和lynis-1.3.8是目录。

如果是'-'(减号),这意味着它的内容是文件。

当它是l(小写l字符),意味这内容是链接文件。

下面的9个字符是关于文件权限。

前3个rwx字符是文件的拥有者的权限,第二组3rwx是文件的所有组的权限,最后的rwx是对其他人访问文件的权限。

第2列这行告诉我们有多少链接指向这个文件。

第3列这行告诉我们谁是这个文件/文件夹的所有者。

第4列这行告诉我们谁是这个文件/文件夹的所有组。

第5列这行告诉我们这个文件/文件夹的以字节为单位的大小。

目录的大小总是4096字节。

第6列这告诉我们文件最后的修改时间。

第7列这告诉我们文件名或者目录名。

3. 显示文件大小以字节为单位看大小可能会不方便。

6.5M读起来比6727680字节更简单。

要这么做,我们可以使用-h 与-l结合的参数。

-h参数意味着便于人识别。

$ ls -lh另外一个可以这么做的参数是--si。

linux ls参数

linux ls参数

linux ls参数摘要:1.Linux ls 命令简介2.ls 命令参数详解a.-l:长格式显示b.-a:显示所有文件和目录c.-r:递归显示目录内容d.-t:按修改时间排序e.-f:显示完整路径f.-i:显示文件索引信息g.-z:显示文件压缩信息h.-L:显示链接文件的完整路径i.-C:显示文件的类型信息j.-n:显示文件名中的斜杠k.-m:显示文件大小,以KB 为单位l.-M:显示文件大小,以MB 为单位m.-B:显示文件大小,以GB 为单位n.-b:显示文件大小,以字节为单位o.-s:以人类可读的格式显示文件大小p.-h:以人类可读的格式显示文件大小q.-g:以组为单位显示文件大小r.-G:以千为单位显示文件大小s.-v:显示详细信息,包括文件权限、所有者等t.-R:按递归方式显示目录内容u.-p:显示文件链接的原始文件v.-x:显示不可见文件(如隐藏文件)w.-1:在输出的每一行中显示一个文件x.-A:显示所有文件,包括隐藏文件y.-Z:显示所有文件,包括压缩文件z.-?:显示帮助信息3.ls 命令的实际应用a.查看当前目录下的所有文件和目录b.查看指定目录下的所有文件和目录c.查看指定文件的信息d.对文件和目录进行排序和筛选正文:Linux 中的ls 命令是一个非常常用的命令,用于列出目录中的文件和子目录。

通过使用不同的参数,我们可以根据需要定制ls 命令的行为,以满足各种不同的需求。

首先,让我们了解一下ls 命令的基本格式:```ls [选项]...[文件]...```接下来,我们将详细介绍ls 命令的各种参数:- `-l`:长格式显示,以列表形式显示文件和目录的详细信息,包括文件权限、所有者、大小、修改日期等。

- `-a`:显示所有文件和目录,包括隐藏文件。

- `-r`:递归显示目录内容,列出指定目录及其子目录中的所有文件和目录。

- `-t`:按修改时间排序,显示按修改日期排序的文件列表。

Linux命令ls详解

Linux命令ls详解
-G 输出文件的组的信息。
-L 列出链接文件名而不是链接到的文件。
-起来。
-R 列出所有子目录下的文件。
-S 以文件大小排序。
-X 以文件的扩展名(最后一个 . 后的字符)排序。
-1 一行只输出一个文件。
–color=no 不显示彩色文件名
-b 把文件名中不可输出的字符用反斜杠加字符编号(就象在C语言里一样)的形式列出。
-c 输出文件的 i 节点的修改时间,并以此排序。
-d 将目录象文件一样显示,而不是显示其下的文件。
-e 输出时间的全部信息,而不是输出简略信息。
-f -U 对输出的文件不排序。
-g 无用。
-i 输出文件的 i 节点的索引信息。
–help 在标准输出上显示帮助信息。
–version 在标准输出上输出版本信息并退出。
例:
ls显示文件信息的说明:
[root@]# ls -lhta
drwxr-xr-x 2 mailbackup mailbackup 24K Oct 23 02:02 qumailxxx
第1字段: 文件属性字段
5. 灰色–>其他文件
接字(sockets)。
-q 用?代替不可输出的字符。
-r 对目录反向排序。
-s 在每个文件名后输出该文件的大小。
-t 以时间排序。
-u 以文件上次被访问的时间排序。
-x 按列输出,横向排序。
-A 显示除 “.”和“..”外的所有文件。
-B 不输出以 “~”结尾的备份文件。
-C 按列输出,纵向排序。
文件属性字段总共有10个字母组成,第一个字母表示文件类型,如果这个字母是一个减号”-”,则说明该文件是一个普通文件.

Linux中ls命令的用法详解

Linux中ls命令的用法详解

Linux中ls命令的⽤法详解⼀.⽬录结构使⽤ls命令我们⾸先要了解Linux下的⽬录结构Linux系统是由各种⽂件和⽬录构成的,就像Windows系统下⽂件和⽂件夹的关系,⼀级⼀级的向下包含扩展,例如在根⽬录下有bin,boot,dev,etc,home等⽬录⽽在这些⽬录下⼜包含了其他的⽂件和⽬录,这样就形成了以根⽬录”/”为根的树形结构另:每个⽬录下都有“.”“..”这样的两个隐藏⽂件,“.”表⽰本⽂件,“..”表⽰⽗⽬录⼆. Linux下的⽂件类型在Linux下⼀切皆⽂件 everything is file,包括⽬录也是⽂件的⼀种⽽这些⽂件被分为七种类型:• -:普通⽂件• d: ⽬录⽂件• b: 块设备• c: 字符设备• l: 符号链接⽂件• p: 管道⽂件pipe• s: 套接字⽂件sock三.Linux中ls命令及其常⽤参数ls功能:列出⾮⽬录的⽂件项,然后是每⼀个⽬录中的“可显⽰”⽂件(可理解为ls命令将本⽬录向下展开两级)ls⽤法:ls [参数] [⽬录名](如过要显⽰当前⽬录的⽂件可不加⽬录名)ls常⽤参数-a 显⽰所有⽂件,包含隐藏⽂件-A 显⽰所有⽂件,包含隐藏⽂件,但不包含.及..-l 显⽰为long format(长格式),列出⽂件的类型、权限、链接数、owner、group、⼤⼩,时间,名字-R-d 不展开⽬录,只显⽰⽬录⾃⾝,⼀般与-l配合使⽤以显⽰⽬录⾃⾝的属性信息(只显⽰当前⽬录的内容)-1 数字1,成列显⽰内容-S 以⽂件⼤⼩排序显⽰,默认从⼤到⼩ -r后,从⼩到⼤-U 按存放顺序排序显⽰-X 按扩展名的⾸字母来排序-t 按mtime排序(先显⽰时间最近的)-ul 按atime排序(先显⽰时间最近的)-ct 按ctime排序(先显⽰时间最近的)补充:关于时间戳:atime 访问时间mtime 数据修改时间(写⼊,修改数据mtime改变,mtime改变ctime必改变)ctime 元数据修改时间(修改权限的时候只有ctime改变)可过“stat ⽂件路径”查看全部时间戳扩展: 如何通过ls只显⽰指定格式的⽂件⾸先我们要了解什么是⽂件名通配符Shell提供了⼀套完整的字符串模式匹配规则,或者称之为元字符,当s h e l l遇到上述字符时,就会把它们当作特殊字符,⽽不是⽂件名中的普通字符,这样⽤户就可以⽤它们来匹配相应的⽂件名,我理解这可以称为通配符。

Linux中ls-l命令详解

Linux中ls-l命令详解

Linux中ls-l命令详解 命令:pi@raspberrypi:~ $ ls -l # 以长格式显⽰⽬录下的内容列表 上图⽤ls -l命令查看某⼀个⽬录会得到⼀个7个字段的列表 1. ⽂件类型 “-”表⽰普通⽂件; “d”表⽰⽬录; “l”表⽰链接⽂件; “p”表⽰管理⽂件; “b”表⽰块设备⽂件; “c”表⽰字符设备⽂件; “s”表⽰套接字⽂件; 2. ⽂件权限 r(Read,读取权限):对⽂件⽽⾔,具有读取⽂件内容的权限;对⽬录来说,具有浏览⽬录的权限 w(Write,写⼊权限):对⽂件⽽⾔,具有新增、修改⽂件内容的权限;对⽬录来说,具有删除、移动⽬录内⽂件的权限 x(execute,执⾏权限):对⽂件⽽⾔,具有执⾏⽂件的权限;对⽬录来说,该⽤户具有进⼊⽬录的权限 第⼀段表⽰⽂件创建者/所有者对该⽂件所具有的权限,第⼆段表⽰创建者/所有者所在的组的其他⽤户所具有的权限,第三段表⽰其他组的其他⽤户所具有的权限-rw-r--r-- 1 root root 76207-2918:19 name.txt //表⽰⽂件的拥有者root对⽂件有读写权限,其他⼈(同组⽤户和其他⽤户只有读的权限) 3. ⽬录/链接个数 该字段表⽰此⽂件是属于哪个⽤户。

linux类系统都是多⽤户系统,每个⽂件都有它的拥有者。

只有⽂件的拥有者才具有改动⽂件属性的权利。

当然, root⽤户具有改动任何⽂件属性的权利。

对于⼀个⽬录来说,只有拥有该⽬录的⽤户,或者具有写权限的⽤户才有在⽬录下创建⽂件的权利 对于⽬录⽂件,表⽰它的第⼀级⼦⽬录的个数。

注意此处看到的值要减2才等于该⽬录下的⼦⽬录的实际个数 4. 所有者及组 该⽂件的所有者/创建者(owner)及其所在的组(group),⼀个⽤户可以加⼊很多个组,但是其中有⼀个是主组,就是显⽰在第4字段的名称 5. ⽂件⼤⼩ 如果是⽂件,则表⽰该⽂件的⼤⼩,单位为字节 如果是⽬录,则表⽰该⽬录符所占的⼤⼩,并不表⽰该⽬录下所有⽂件的⼤⼩。

Linux终端命令解析ls命令详解

Linux终端命令解析ls命令详解

Linux终端命令解析ls命令详解Linux是一种开源的操作系统,而终端命令是Linux系统的重要组成部分。

其中,ls命令是最基础和常用的命令之一。

本文将详细解析ls 命令的功能和使用方法。

ls命令用于列出目录中的文件和子目录。

通过运行ls命令,可以查看当前目录下的所有文件和子目录的列表。

以下是ls命令的常见用法:1. 列出目录内容要列出当前目录下的文件和子目录,只需在终端中运行“ls”命令即可。

ls命令将会返回一个包含文件和子目录的列表。

2. 列出隐藏文件在Linux系统中,以句点开头的文件和目录是隐藏文件。

这些文件默认情况下不会被显示。

要列出所有文件,包括隐藏文件,可以运行“ls -a”命令。

通过添加“-a”选项,ls命令会将隐藏文件一并列出。

3. 列出详细信息要获取更详细的文件信息,可以使用“ls -l”命令。

该命令将以长格式列出文件和子目录,并提供文件的权限、所有者、大小和修改日期等详细信息。

4. 按时间排序可以通过“ls -t”命令将文件和子目录按照修改时间的先后顺序进行排序。

最新修改的文件将显示在列表的顶部。

5. 按文件大小排序使用“l s -S”命令可以按文件大小对文件和子目录进行排序。

文件大小按照字节计算,最大的文件将显示在列表的顶部。

6. 递归列出子目录通过“ls -R”命令,可以递归列出当前目录下的所有子目录和文件。

这对于查看深层嵌套的目录结构非常有用。

7. 显示文件权限要查看文件的权限,可以使用“ls -l”命令。

在文件列表的第一列中,会显示文件或子目录的权限信息。

r代表读取权限,w代表写入权限,x代表执行权限。

8. 根据文件类型显示不同颜色通过“ls --color”命令,可以根据不同文件类型显示不同的颜色。

这有助于更加直观地识别文件类型,如目录以蓝色显示,执行文件以绿色显示等。

9. 列出文件大小要查看文件的大小,可以使用“ls -l”命令。

在文件列表的第五列中,会显示文件的大小信息。

Linux中ls命令详解

Linux中ls命令详解

Linux中ls命令详解ls命令是linux下最常⽤的命令之⼀,ls跟dos下的dir命令是⼀样的都是⽤来列出⽬录下的⽂件,下⾯我们就来⼀起看看ls的⽤法英⽂全名:List即列表的意思,当我们学习某种东西的时候要做到知其所以然,当你知道了这个东西⼤概是个什么了以后你的思维就会联想到很多的东西学习的就会很快。

1. ls -a 列出⽂件下所有的⽂件,包括以“.“开头的隐藏⽂件(linux下⽂件隐藏⽂件是以.开头的,如果存在..代表存在着⽗⽬录)。

2. ls -l 列出⽂件的详细信息,如创建者,创建时间,⽂件的读写权限列表等等。

3. ls -F 在每⼀个⽂件的末尾加上⼀个字符说明该⽂件的类型。

"@"表⽰符号链接、"|"表⽰FIFOS、"/"表⽰⽬录、"="表⽰套接字。

4. ls -s 在每个⽂件的后⾯打印出⽂件的⼤⼩。

size(⼤⼩)5. ls -t 按时间进⾏⽂件的排序 Time(时间)6. ls -A 列出除了"."和".."以外的⽂件。

7. ls -R 将⽬录下所有的⼦⽬录的⽂件都列出来,相当于我们编程中的“递归”实现8. ls -L 列出⽂件的链接名。

Link(链接)9. ls -S 以⽂件的⼤⼩进⾏排序以上是⼀些关于ls命令的⼀些⽤法,当然还有好多没有列出来,⼤家可以man⼀下。

有助于学习英⽂ls可以结合管道符”|“来进⾏⼀下复杂的操作。

⽐如: ls | less⽤于实现⽂件列表的分页,ls计算当前⽬录下的⽂件数量ls -|*|grep "^-"| wc -|最后说⼀下linux下⽂件的⼀些⽂件颜⾊的含义绿⾊---->代表可执⾏⽂件,(绿⾊代表通⾏证的意思)呵呵红⾊---->代表压缩⽂件深蓝⾊---->代表⽬录浅蓝⾊----->代表链接⽂件灰⾊---->代表其它的⼀些⽂件。

linux中ls命令怎么实现的,Linux中ls命令的实现

linux中ls命令怎么实现的,Linux中ls命令的实现

linux中ls命令怎么实现的,Linux中ls命令的实现ls命令是下最常⽤的命令之⼀,ls跟dos下的dir命令是⼀样的都是⽤来列出⽬录下的⽂件,下⾯我们就来⼀起看看ls的实现⽅法。

#include是POSIX.1标准定义的unix类⽬录操作的头⽂件,包含了许多UNIX系统服务的函数原型,例如opendir函数、readdir函数. opendir函数:DIR *opendir(const char *pathname);返回值:若成功则返回指针,若出错则返回NULL。

struct dirent *readdir(DIR *dp); 返回值:若成功则返回指针,若在⽬录结尾或出错则返回NULL。

ls的简要实现:写makefile运⾏测试:--------------------------------------分割线 --------------------------------------见下⾯程序:#include#include#includeint main( int argc, int *argv[] ){undefinedDIR *dir;struct dirent *dirp;if ( argc != 2 ){undefinedprintf( "usage: %s directory_name \n", argv[0] );return -1;}if ( !(dir=opendir(argv[1])) ){undefinedprintf( "can not open %s\n", argv[1] );return -1;}while ( (dirp=readdir(dir)) != NULL ){undefinedprintf( "%s\n", dirp->d_name );}closedir( dir );return 0;}对其中的⼏个重要结构体和函数解说⼀下。

linux的ls命令用途及参数

linux的ls命令用途及参数

linux的ls命令用途及参数Linux的ls命令是一个非常常用的命令,用于显示文件和目录的列表。

它可以帮助用户快速浏览文件系统的内容,并提供了一些参数来定制显示的结果。

下面我们将详细介绍ls命令的用途及常用参数。

一、ls命令的用途ls命令用于列出文件和目录的信息,可以显示文件的权限、所有者、大小、创建时间等详细信息。

通过ls命令,用户可以快速查看当前目录下的文件和目录,以及它们的属性和大小。

二、常用参数1. -a 参数-a 参数用于显示所有文件,包括以"."开头的隐藏文件。

在Linux系统中,以"."开头的文件被视为隐藏文件,ls命令默认不显示隐藏文件。

使用-a参数可以显示所有文件,包括隐藏文件。

2. -l 参数-l 参数用于以长格式显示文件和目录的详细信息。

使用-l参数,ls 命令将以一列的形式显示文件和目录的详细信息,包括文件的权限、所有者、大小、创建时间等。

3. -h 参数-h 参数用于以人类可读的格式显示文件和目录的大小。

使用-h参数,ls命令将以K、M、G等单位显示文件和目录的大小,方便用户阅读。

4. -r 参数-r 参数用于反向排序,即将文件和目录按照字母倒序排列。

使用-r 参数,ls命令将按照字母倒序的方式显示文件和目录。

5. -t 参数-t 参数用于按照修改时间排序,即将文件和目录按照修改时间排序。

使用-t参数,ls命令将按照修改时间的先后顺序显示文件和目录。

6. -S 参数-S 参数用于按照文件大小排序,即将文件和目录按照大小排序。

使用-S参数,ls命令将按照文件大小的顺序显示文件和目录。

7. -R 参数-R 参数用于递归显示目录及其子目录的内容。

使用-R参数,ls命令将显示当前目录及其子目录中的所有文件和目录。

8. -d 参数-d 参数用于显示目录本身的信息,而不显示目录中的文件和子目录。

使用-d参数,ls命令只显示当前目录的详细信息。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Linux-ls命令模拟////ls.c//wxd////create by jneeyou on15/11/13//Copyright(c)2015wxd.All rights reserved.//#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include"ls_fileHandle.h"/**主函数**/int main(int argc,char*argv[]){int mask=0;bool ret=false;freopen(".err.dat","wb",stderr);if(!init()){return-1;}mask=getCmdLineArgs(argc,argv);if(mask==-2)//--help命令{getHelpMenu();//显示帮助}else if(mask==ERROR){printf("参数有误,输入\"./ls--help\"查看帮助\n");}else//其他命令{setMaskArray(mask);ret=getDirInfo(".",0);if(!ret){printf("参数有误,输入\"./ls--help\"查看帮助\n");}freeMem();}system("rm-f.err.dat");return0;}////ls_fileHandle.h//wxd////create by jneeyou on15/11/13//Copyright(c)2015wxd.All rights reserved.//#ifndef__LS_FILE_HANDLE_H__#define__LS_FILE_HANDLE_H__//定义bool型#if!defined(bool)#define bool char#define true1#define false0#endif#ifndef ERROR#define ERROR-1#endif#if defined(__STDC__VERSION__)&&(__STDC__VERSION__>=199901L) //@desc宏函数,输出文件信息#define printf_c(fontBgColor,fontColor,format,args...) printf("\033[fontBgColor;fontColorm format\033[0m",args)#else//@desc输出文件信息//带颜色输出,可设置字体颜色和字体背景颜色extern int printf_c(char fontBgColor,char fontColor,const char*format,...);#endif//@desc获取命令行参数,返回掩码值extern int getCmdLineArgs(int argc,char*argv[]);//@desc设置掩码数组//@ret成功返回true,否则返回falseextern bool setMaskArray(int maskValue);//@desc获得文件信息//@ret成功返回true,否则返回falseextern bool getFileInfo(const char*dirName,const char*fileName,unsigned int index);//@desc获得目录信息//@ret成功返回true,否则返回falseextern bool getDirInfo(const char*dirName,int dirLevel);//@desc获得帮助菜单extern void getHelpMenu();//@desc释放内存void freeMem();//@desc初始化bool init();#endif//__LS_FILE_HANDLE_H__////ls_fileHandle.c//wxd////create by jneeyou on15/11/13//Copyright(c)2015wxd.All rights reserved. //#include<stdio.h>#include<stdlib.h>#include<string.h>#include<sys/stat.h>#include<stdarg.h>#include<unistd.h>#include<dirent.h>#include<time.h>#include<math.h>#include<pwd.h>#include<grp.h>#include<sys/types.h>#ifndef ERROR#define ERROR-1#endif#define OK0#define NUL_POINTER NULL//定义bool,true,false#ifndef bool#define bool char#define true1#define false0#endif//帮助文件名#define HELP_FILE"helpInfo.dat"#define TMP_FILE".tmp~"//定义errno_t型#define errno_t int//定义文件类型#define block_file'b'#define direct_file'd'#define spec_char_file'c'#define fifo_device'p'#define regular_file'-'#define link_file'l'#define socket_file's'#define BF block_file//块文件#define DF direct_file//目录文件#define CF spec_char_file//特殊字符文件#define FD fifo_device//FIFO设备#define RF regular_file//普通文件#define LF link_file//符号链接文件#define SF socket_file//scoket文件//文件名最大长度#define MAX_FILE_NAME512//最多子目录个数#define MAX_SUB_DIR100//背景色typedef struct BG_COLOR{const char BLACK;//黑const char DARKRED;//深红const char GREEN;//绿const char YELLOW;//黄const char BLUE;//蓝const char PURPLE;//紫const char DARKGREEN;//深绿const char WHITE;//白const char DEFAULT;//默认}bgColor;//文字背景色static const bgColor font_bgColor={40,41,42,43,44,45,46,47,0};//前景色typedef struct FG_COLOR{const char BLACK;//黑const char RED;//红const char GREEN;//绿const char YELLOW;//黄const char BLUE;//蓝const char PURPLE;//紫const char DARKGREEN;//深绿const char WHITE;//白const char DEFAULT;//默认}fgColor;//文字颜色static const fgColor font_fgColor={30,31,32,33,34,35,36,37,0};//文件信息结构体typedef struct File_Info{ino_t ino;//节点号char type;//类型char perm[10];//权限nlink_t nlink;//硬链接数char uname[32];//用户名char gname[32];//所属组名off_t size;//大小time_t mtime;//最后修改时间char name[32];//文件名char lname[32];//链接的文件名char nameColor;//名字颜色char lnameColor;//链接文件颜色}fileInfo;#define MAX_FILE_NUM100//文件信息结构体数组static fileInfo*m_fileInfo=NULL;//已分配空间static unsigned int ALLOC_MEM_LEN=0;/////////////////////////////////////全局变量/////////////////////////////////////////////////掩码数组,根据每位元素值是否为1选择获取文件哪些//信息,每位元素对应一个ls命令参数,对应关系如下://maskArray[0]-->-l//maskArray[1]-->-a//maskArray[2]-->-R//maskArray[3]-->-r//maskArray[4]-->-d//maskArray[5]-->-i//maskArray[6]-->-S(大写S)//maskArray[7]-->-t//maskArray[8]-->-m//maskArray[9]-->-1(数字1)//maskArray[10]-->--help//maskArray[11]-->无参数//maskArray[12...15]-->保留static unsigned char maskArray[16]={0};//掩码数组有效长度#define VALID_LEN_ARRAY10//保存外部输入的文件名static char fileName[128][20]={""};//外部文件数目static int extFileNums=0;/////////////////////////////////////////////////////////////////////////////////////// ////////////////------------------------------------函数实现---------------------------------/////////////////////////////////////////////////////////////////////////////////////////////// ////////检查参数errno_t checkArgement(char arg){static const char allArgs[]={'l','a','R','r','d','i','S','t','m','1'};int len=strlen(allArgs);int i=0;for(i=0;i<len;i++){if(arg==allArgs[i])return i;}return ERROR;}//安全拷贝errno_t strcpy_s(char*_Dst,size_t_SizeInBytes,const char*_Src){char*ret=NULL;if(strlen(_Src)>_SizeInBytes){return ERROR;}ret=strcpy(_Dst,_Src);if(ret==NULL)return ERROR;return OK;}//安全打开errno_t fopen_s(FILE**_File,const char*_Filename,const char*_Mode){*_File=fopen(_Filename,_Mode);if(*_File==NULL)return ERROR;return OK;}//安全输出errno_t vsprintf_s(char*_DstBuf,size_t_SizeInBytes,const char*_Format,va_list _ArgList){errno_t ret=vsnprintf(_DstBuf,_SizeInBytes,_Format,_ArgList);return ret;}//获取命令行参数,返回掩码值int getCmdLineArgs(int argc,char*argv[]){int maskValue=0x0000;int fileCount=0;int i=0;for(i=1;i<argc;i++){if(!strcmp(argv[i],"--help")){return-2;}else if(argv[i][0]=='-'){int len=strlen(argv[i]);int ret=ERROR;while(--len){ret=checkArgement(argv[i][len]);if(ret==ERROR)return ERROR;maskValue|=(0x0001<<ret);}}else{strcpy_s(fileName[fileCount++],sizeof(fileName[0]),argv[i]);}}extFileNums=fileCount;return maskValue;}//设置掩码数组bool setMaskArray(int maskValue){long tmp=0x10000;int i=15;memset(maskArray,0,sizeof(maskArray));if(maskValue==0){maskArray[11]=1;return true;}while(!((tmp>>=1)&maskValue)&&tmp>0)i--;while(tmp>0){if(tmp&maskValue){maskArray[i--]=1;}else{maskArray[i--]=0;}tmp>>=1;}return true;}#if!(defined(__STDC__VERSION__)&&__STDC__VERSION__>=199901L)//@desc宏函数,带颜色输出,#format,将format对应的参数字符串化(为变量名时,不是变量中的值,而是变量名)#define PRINT_BY_COLOR(fontBgColor,Bold,fontColor,format,argsValue)printf("\033[%d;%02d;%dm"#format"\033[0m",fontBgColor,Bold,fontColor,argsValue)//输出文件信息int printf_c(char fontBgColor,char fontColor,const char*format,...){static char printf_buf[1024];va_list args;int n=0;int bold=0;va_start(args,format);n=vsprintf_s(printf_buf,sizeof(printf_buf),format,args);va_end(args);if(fontBgColor<40||fontBgColor>47){fontBgColor=font_bgColor.DEFAULT;}if(fontColor<30||fontColor>37){fontBgColor=font_fgColor.DEFAULT;}if(fontColor==font_fgColor.BLACK){bold=0;}PRINT_BY_COLOR(fontBgColor,bold,fontColor,"%s",printf_buf);return n;}#endif//通过uid获得用户名char*getUnameByUid(uid_t uid){struct passwd*m_pw;static char name[20]="";m_pw=getpwuid(uid);if(m_pw==NULL){return NUL_POINTER;}strcpy_s(name,sizeof(name),m_pw->pw_name);return name;}//通过gid获得组名char*getGnameByGid(gid_t gid){struct group*m_gr;static char name[20]="";m_gr=getgrgid(gid);if(m_gr==NULL){return NUL_POINTER;}strcpy_s(name,sizeof(name),m_gr->gr_name);return name;}//获取符号链接链接的文件名bool getFileNameBySLink(char*sLinkName,char*buf,size_t bufSize) {int len=0;len=readlink(sLinkName,buf,bufSize);buf[len]='\0';if(len>bufSize){perror("文件名过长,已被截取.");}return true;}//获取文件访问权限char*getFileAccePermis(mode_t st_mode){static char perm[9]="";char permValue[4]="xwr-";int i=0,len=9;for(i=0;i<len;i++){if(st_mode&(0x1<<i)){perm[len-i-1]=permValue[i%3];}else{perm[len-i-1]=permValue[3];}}return perm;}//获取文件类型char getFileType(mode_t st_mode){switch(st_mode&S_IFMT){case S_IFBLK:return BF;case S_IFDIR:return DF;case S_IFCHR:return CF;case S_IFIFO:return FD;case S_IFREG:return RF;case S_IFLNK:return LF;case S_IFSOCK:return SF;default:return ERROR;}}//通过文件类型获得文件名颜色char getFileColorByType(const char*fileName,char type){char cmd[3][512];char ret=font_fgColor.BLACK;if(type==DF)return font_fgColor.BLUE;if(type==LF)return font_fgColor.DARKGREEN;if(access(fileName,X_OK)==0)return font_fgColor.GREEN;//测试是否为压缩文件if(!system("mkdir tmp~")){sprintf(cmd[0],"tar-xf%s-C tmp~",fileName);sprintf(cmd[1],"tar-xzf%s-C tmp~",fileName);sprintf(cmd[2],"tar-xjf%s-C tmp~",fileName);if(!system(cmd[0])||!system(cmd[1])||!system(cmd[2])){ret=font_fgColor.RED;}}system("rm-Rf tmp~");return ret;}//获得文件信息bool getFileInfo(const char*dirName,const char*fileName,unsigned int index) {struct stat fileStat;char name[50];sprintf(name,"%s/%s",dirName,fileName);//数组已装满if(index>=ALLOC_MEM_LEN){m_fileInfo=(fileInfo*)realloc(m_fileInfo,sizeof(fileInfo)*ALLOC_MEM_LEN*2);ALLOC_MEM_LEN*=2;}//获取文件信息int ret=lstat(name,&fileStat);if(ret==-1){return false;}//节点号m_fileInfo[index].ino=fileStat.st_ino;//文件类型m_fileInfo[index].type=getFileType(fileStat.st_mode);//文件权限strcpy_s(m_fileInfo[index].perm,sizeof(m_fileInfo[index].perm), getFileAccePermis(fileStat.st_mode));//硬链接数m_fileInfo[index].nlink=fileStat.st_nlink;//用户名strcpy_s(m_fileInfo[index].uname,sizeof(m_fileInfo[index].uname), getUnameByUid(fileStat.st_uid));//组名strcpy_s(m_fileInfo[index].gname,sizeof(m_fileInfo[index].gname), getGnameByGid(fileStat.st_gid));//文件大小m_fileInfo[index].size=fileStat.st_size;//上次修改时间m_fileInfo[index].mtime=fileStat.st_mtime;return true;}//自定义排序函数int cmp(const void*a,const void*b){char tmpA,tmpB;fileInfo*fileInfoA=(fileInfo*)a;fileInfo*fileInfoB=(fileInfo*)b;if(maskArray[7]==1){return fileInfoA->mtime-fileInfoB->mtime;}else if(maskArray[6]==1){return fileInfoA->size-fileInfoB->size;}tmpA=fileInfoA->name[0];if(tmpA>='A'&&tmpA<='Z'){tmpA+='a'-'A';}tmpB=fileInfoB->name[0];if(tmpB>='A'&&tmpB<='Z'){tmpB+='a'-'A';}if(maskArray[3]==1){return tmpB-tmpA;}else{return tmpA-tmpB;}}//文件排序void sortFiles(fileInfo*pFileInfoArray,int elemNum){qsort(pFileInfoArray,elemNum,sizeof(pFileInfoArray[0]),cmp);}//移动输出位置void moveOutPos(int row,int col){char hori='A';//向上char vert='C';//向右if(row<0)//向下{hori='B';row=-row;}if(col<0)//向左{vert='D';col=-col;}printf("\033[%d%c\033[%d%c",row,hori,col,vert);}//通过掩码数组输出文件//返回输出内容长度int outFileByMaskArray(fileInfo cur_fileInfo,unsigned char maskArray[]) {int outputFlag=0;//是否输出标志char outStr[1024]="";//输出字符串int i=0;int len=0;//不带参数情况if(maskArray[11]==1){printf_c(font_bgColor.DEFAULT,cur_Color,"%s",cur_);return strlen(cur_);}//-l命令,长格式输出if(maskArray[0]){struct tm*mTime=localtime(&cur_fileInfo.mtime);char str[20]="";sprintf(str,"%4d.%02d.%02d%02d:%02d:%02d",mTime->tm_year+1900,mTime->tm_mon+1,mTime->tm_mday,mTime->tm_hour,mTime->tm_min,mTime->tm_sec);sprintf(outStr,"%c%s.%d%s%s%-8d%s",cur_fileInfo.type,cur_fileInfo.perm,cur_fileInfo.nlink,cur_fileInfo.uname,cur_fileInfo.gname,cur_fileInfo.size,str);}//-i命令,输出节点号inoif(maskArray[5]){char tmp[512]="";strcpy_s(tmp,sizeof(tmp),outStr);sprintf(outStr,"%d%s",cur_fileInfo.ino,tmp);}len=strlen(outStr);printf("%s",outStr);//输出文件信息if(maskArray[0]){printf("");len+=2;}len+=strlen(cur_);printf_c(font_bgColor.DEFAULT,cur_Color,"%s",cur_);//-l格式下的输出链接文件指向的文件if(maskArray[0]&&cur_fileInfo.type==LF){printf("->");printf_c(font_bgColor.DEFAULT,cur_fileInfo.lnameColor,"%s",cur_fileInfo.lname);len+=strlen(cur_fileInfo.lname)+4;}return len;}//获得目录信息bool getDirInfo(const char*dirName,int dirLevel){DIR*curDir=opendir(dirName);char linkedFile[MAX_FILE_NAME]="";char subDirFile[MAX_SUB_DIR][MAX_FILE_NAME];//保存目录文件int cnt_subDir=0;//子目录数int cnt_dirFiles=0;//目录下文件数int i=0,ret=0;static firCallFlag=1;//第一次调用标记int total_size=0;char tmp[MAX_FILE_NAME]="";struct stat m_stat;if(curDir==NULL){return false;}//-R命令时首先输出目录名if(maskArray[2]){for(i=0;i<dirLevel;i++){printf("\t");}printf("%s:\n",dirName);}struct dirent*m_dirent=NULL;while((m_dirent=readdir(curDir))!=NULL){if(!strcmp(".err.dat",m_dirent->d_name)){continue;}if(!strcmp(dirName,".")&&extFileNums>0){for(i=0;i<extFileNums;i++){if(!strcmp(fileName[i],m_dirent->d_name)){break;}}firCallFlag=0;if(i==extFileNums)continue;}//非-a命令时跳过隐藏文件if(m_dirent->d_name[0]=='.'&&maskArray[1]!=1){continue;}ret=getFileInfo(dirName,m_dirent->d_name,cnt_dirFiles);if(!ret||!strcmp(m_dirent->d_name,""))break;//-d命令跳过非目录文件if(maskArray[4]==1&&m_fileInfo[cnt_dirFiles].type!=DF) {continue;}sprintf(tmp,"%s/%s",dirName,m_dirent->d_name);strcpy_s(m_fileInfo[cnt_dirFiles].name,sizeof(m_fileInfo[cnt_dirFiles].name),m_dirent->d_name); m_fileInfo[cnt_dirFiles].nameColor=getFileColorByType( tmp,m_fileInfo[cnt_dirFiles].type);//获得链接的目标文件名if(m_fileInfo[cnt_dirFiles].type==LF){getFileNameBySLink(tmp,linkedFile,sizeof(linkedFile));strcpy_s(m_fileInfo[cnt_dirFiles].lname,sizeof(m_fileInfo[cnt_dirFiles].lname),linkedFile);lstat(linkedFile,&m_stat);sprintf(tmp,"%s/%s",dirName,linkedFile);m_fileInfo[cnt_dirFiles].lnameColor=getFileColorByType(tmp,getFileType(m_stat.st_mode));}//-R命令时保存子目录if(maskArray[2]&&m_fileInfo[cnt_dirFiles].type==DF){strcpy_s(subDirFile[cnt_subDir],sizeof(subDirFile[cnt_subDir]),m_fileInfo[cnt_dirFiles].name);cnt_subDir++;}total_size+=m_fileInfo[cnt_dirFiles].size;cnt_dirFiles++;firCallFlag=1;}if(firCallFlag==0){return false;}//排序输出文件sortFiles(m_fileInfo,cnt_dirFiles);//输出文件int col=4,row;int max_lenRowOfCol=0;//当前列最长行长度int total_lenRow=0;//当前行总长度int len=0,firColFlag=0;int j=0;row=cnt_dirFiles/col;row=(cnt_dirFiles*1.0/col>row)?row+1:row;if(maskArray[0]==1){if(maskArray[2]){for(j=0;j<dirLevel;j++){printf("\t");}}printf("file number:%d total size:%d\n",cnt_dirFiles,total_size);}for(i=1;i<=cnt_dirFiles;i++){if(maskArray[2]&&(i<=row||maskArray[0]||maskArray[9])) {for(j=0;j<dirLevel;j++){printf("\t");}}len=outFileByMaskArray(m_fileInfo[i-1],maskArray);if(maskArray[0]==1){printf("\n");}else if(maskArray[9]==1){printf("\n");}else if(maskArray[8]==1){if(i!=cnt_dirFiles)printf(",");}else{if(i==cnt_dirFiles){if(i%row!=0){moveOutPos(-(row-(i%row)),total_lenRow+len);}}else if(i%row==0){total_lenRow+=max_lenRowOfCol;max_lenRowOfCol=0;if(row>1)moveOutPos(row-1,-total_lenRow);printf("\033[%dC",total_lenRow+3);total_lenRow+=3;firColFlag=1;}else{if(max_lenRowOfCol<len){max_lenRowOfCol=len;}if(firColFlag)//不是首列{if(row>1)moveOutPos(-1,-len);}else{printf("\n");}}}}closedir(curDir);printf("\n");//递归遍历子目录char dirPath[50]="";if(maskArray[2]){for(i=0;i<cnt_subDir;i++){if(!strcmp(subDirFile[i],".")||!strcmp(subDirFile[i],"..")){continue;}sprintf(dirPath,"%s/%s",dirName,subDirFile[i]);getDirInfo(dirPath,dirLevel+1);}}return true;}//获得帮助菜单void getHelpMenu(){FILE*fp=NULL;char ch;fopen_s(&fp,HELP_FILE,"rb");if(fp==NULL){fopen_s(&fp,TMP_FILE,"rb");if(fp==NULL){return;}}while((ch=fgetc(fp))!=EOF){fputc(ch,stdout);}fclose(fp);return;}//初始化bool init(){m_fileInfo=(fileInfo*)malloc(sizeof(fileInfo)*MAX_FILE_NUM);ALLOC_MEM_LEN+=MAX_FILE_NUM;if(m_fileInfo==NULL){return false;}return true;}//释放内存void freeMem(){free(m_fileInfo);m_fileInfo=NULL;}##MakeFile#CC=gccCFLAGS=CFILES=$(wildcard*.c)OBJS=$(CFILES:%c=%o)ls:$(OBJS)$(CC)$(CFLAGS)-o ls$(OBJS).c.o:$(CC)-c$^.PHONY:cleanclean:rm-f ls_fileHandle*.o main*.ohel p I nf o.d at l s.c l s_f i l eH and l e.c l s_f i l eH and l e.h M akef i l e。

相关文档
最新文档