㈠ linux中ls -l是如何工作的如何去实现一个脚本
可以参考:
#include
<sys/types.h>
#include
<sys/stat.h>
#include
<unistd.h>
#include
<stdio.h>
#include
<string.h>
#include
<errno.h>
#include
<pwd.h>
#include
<grp.h>
#include
<time.h>
#include
<dirent.h>
int
do_ls(char
*dir,char
*filename,int
lflag)
{
int
n;
struct
stat
buf;
char
out[100];
struct
passwd
*pw;
struct
group
*gr;
struct
tm
*t;
if(lflag
==
0)
//如果不带l参数,直接显示文件/目录名
{
printf("%s\t",filename);
return
0;
}
if(lstat(dir,&buf)<0)
{
fprintf(stderr,"stat
error:%s\n",strerror(errno));
return
-1;
}
switch(buf.st_mode
&
s_ifmt)
//获取字符串的属性:普通文件-、目录d、字符设备c、块设备b、管道文件p、连接文件l、套接字文件s
{
case
s_ifreg:
printf("-");
break;
case
s_ifdir:
printf("d");
break;
case
s_ifchr:
printf("c");
break;
case
s_ifblk:
printf("b");
break;
case
s_ififo:
printf("p");
break;
case
s_iflnk:
printf("l");
break;
case
s_ifsock:
printf("s");
break;
}
for(n=8;n>=0;n--)
//打印文件的读写属性:读r、写w、执行x、无权限-
{
if(buf.st_mode&(1<<n))
{
switch(n%3)
{
case
2:
printf("r");
break;
case
1:
printf("w");
break;
case
0:
printf("x");
break;
default:
break;
}
}
else
{
printf("-");
}
}
printf("
%d",buf.st_nlink);
//硬链接数,此链接非彼链接,指(包含)目录的个数,文件为1,目录起始为2,再加上目录里包含的目录个数(不递归,只一层)
pw
=
getpwuid(buf.st_uid);
//所属用户名
printf("
%s",pw->pw_name);
gr
=
getgrgid(buf.st_gid);
//所属组名
printf("
%s",gr->gr_name);
printf("
%ld",buf.st_size);
//字节计总大小
t
=
localtime(&buf.st_atime);
//最后一次访问时间
printf("
%d-%d-%d
%d:%d"
,t->tm_year+1900
,t->tm_mon+1
,t->tm_mday
,t->tm_hour
,t->tm_min);
printf("
%s
",filename);
if(s_islnk(buf.st_mode))
//判断是否为链接,是返回真
{
printf("
->
");
if(readlink(filename,out,100)==-1)
{
//printf("readlink
error\n");
}
printf("%s",out);
}
printf("\n");
return
0;
}
int
ls_prepare(char
*w,int
aflag,int
lflag)
//ls的准备工作
{
struct
stat
buf;
//man
lstat可以看到此结构
char
name[100];
dir
*dir;
//类似打开文件的fd描述符
struct
dirent
*pdr;
//man
readdir可以看到此结构
if(lstat(w,&buf)<0)
//获取文件/目录属性并赋值给buf,该函数和lstat一样,只是当w为链接时,指代他本身,并不存在文件
{
fprintf(stderr,"stat
error:%s\n",strerror(errno));
return
-1;
}
if(s_isdir(buf.st_mode))
//判断是否为目录,是返回真
{
dir
=
opendir(w);
//打开目录
while
((pdr
=
readdir(dir))!=null)
//读/遍历目录
{
if(aflag==0)
//如果不带a参数,越过以.开头的所有文件/目录
{
if(pdr->d_name[0]=='.')
continue;
memset(name,0,100);
strcpy(name,w);
//拷贝
strcat(name,"/");
//追加
strcat(name,pdr->d_name);
do_ls(name,pdr->d_name,lflag);
}else
//有a参数显示所有
{
memset(name,0,100);
strcpy(name,w);
strcat(name,"/");
strcat(name,pdr->d_name);
do_ls(name,pdr->d_name,lflag);
}
}
closedir(dir);
}else
//为文件则直接显示
{
do_ls(w,w,lflag);
}
return
0;
}
int
main(int
argc,char
**argv)
{
int
aflag
=0;
int
lflag
=0;
char
c;
int
i;
while((c
=
getopt(argc,argv,"al"))!=-1)
//解析命令行参数,即-/--后面的字符串和给定的字符串匹配,有未解析字母返回字母或问号(取决于第3个参数),否则返回-1
{
switch(c)
//此处仅匹配a(所有)和l(列表),即只支持参数a、l
{
case
'a':
aflag
=1;
break;
case
'l':
lflag
=1;
break;
default:
break;
}
}
if(argc
==
optind
)
//optind系统变量,执行命令参数的个数(不包括命令,奇怪的是无参情况下他为1),判断argc是否为1,是则取当前路径,让我们显得更专业点
{
ls_prepare("./",aflag,lflag);
}
else
{
for(i=optind;i<argc;i++)
//所有目录都传进去
ls_prepare(argv[i],aflag,lflag);
}
printf("\n");
return
0;
}
㈡ linux下ls命令
功能:ls命令用来显示目标列表,在Linux中是使用率较高的命令。ls命令的输出信息可以进行彩色加亮显示,以分区不同类型的文件。
格式: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 默认时间格式问题请教。 越详细越好。
Linux 的时间内部是 timestemp 。这个时间输出是根据当前时区的设置进行输出,当前时区的设置文件是 /etc/localtime (如果我没记错)。就算你没设置时区,那么系统依然会有一个默认的时区进行输出。
系统默认有一个 localtime ,好像格式设置是英国表示法。时区没有,应该是 local 时间而不是 GMT 。
一个正确使用的 linux 专用机器,计算机时间一般是保存为格林威治标准时间,系统在输出时会根据 localtime 进行转换输出。
自定义默认日期应该是在输出时间时设置输出格式信息,而不是强行的去设置整个系统的环境。
因为这个设置只对考虑时区设置的输出格式的一些程序管用,在系统内部,依然是通用的 timestemp 存储。而且很多程序有自己独立的设置,尤其是在某些程序里面,他不同的情况下会进行不同的输出。比如 mysql ,非 timestemp 时间的存储用的是 ISO 标准格式,也就是 YYYY-MM-DD HH:mm:ss 的样子(如果还是我没记错),如果你需要格式要求,需要自己查询后或者查询时进行格式转换。
你正在一个错误的方向进行一个错误的折腾。
㈣ linux系统如何用一个指令去查看另一个指令执行用了多长时间
time命令可以查看执行时间
比如要查看ls执行时间, 可以用"time ls",就会看到执行时间了。
㈤ Linux ls 显示文件年份 并支持自定义显示年月日时分秒
默认情况下 ls -l 命令只显示月和日,不显示年份:
如要要显示年份,就要使用 --time-style 参数,该参数有几个选项:
所以要显示年份可以使用 full-iso 、 long-iso 、 +Format 这几种参数选项。
--time-style=full-iso 有一个替代参数 --full-time ,可以直接用这个参数来显示精确的时间:
Linux下文件的创建时间、访问时间、修改时间和改变时间:
ls -lu filename 列出文件的 atime (最后读取时间)
ls -lc filename 列出文件的 ctime (最后权限时间)
ls -l filename 列出文件的 mtime (修改文件内容)
㈥ Linux系统通配符与ls命令的功能及用法
文件通配符
* 匹配零个或多个字符
? 匹配任何单个字符
~ 当前用户家目录
~mage 用户mage家目录
~+ 当前工作目录
~- 前一个工作目录
[0-9] 匹配数字范围
[a-z]:字母(或的关系)就是表示中括号中的某一个字符
[A-Z]:字母
[a-c]:a A b B c
[A-C]:A b B c C,也就是[]在里面匹配字母时是以aAbB...这样排序的
[wang] 匹配列表中的任何的一个字符
[^wang] 匹配列表中的所有字符以外的字符
{}花括号用来匹配一组用逗号分隔的字符串中的任一个。
左花括号之前的所有字符称为前文(preamble),右花括号之后的所有字符称为后文(preamble)。
前文和后文都是可选的。花括号中不能包含不加引号的空白符
预定义的字符类:man 7 glob(通配符)
[:digit:]:任意数字,相当于0-9
[:lower:]:任意小写字母[:lower:] 这个只相当于a-z,表示的时候必须要在加上中括号
[:upper:]: 任意大写字母
[:alpha:]: 任意大小写字母
[:alnum:]:任意数字或字母
[:blank:]:水平空白字符
[:space:]:水平或垂直空白字符
[:punct:]:标点符号
[:print:]:可打印字符
[:cntrl:]:控制(非打印)字符
[:graph:]:图形字符
[:xdigit:]:十六进制字符
ls命令的功能:
列出当前目录的内容或指定目录
ls命令的用法:
ls [options] [files_or_dirs]
示例:
ls -a 包含隐藏文件
ls -l 显示额外的信息
ls -r 倒转排序或者可以说是逆序排列
ls -R 目录递归通过(递归会进入到子目录)
ls -ld 目录和符号链接信息
ls -1 文件分行显示(列显示)
ls –S 按从大到小排序(按文件的大小排序)
ls –t 按mtime排序(按文件的修改时间排序)
ls –u 配合-t选项,显示并按atime从新到旧排序
ls –U 按目录存放顺序显示(以创建文件的次序进行显示)
ls –X 按文件后缀排序
ls -d 列出目录本身并不显示内容
ls -h 单位换算
ls -I --ignore(忽略)=PATTERN(模式)按着规定的模式去隐藏不进行显示
实例:
1、显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数
字的文件或目录
ls -d /var/l*[0-9]*[[:lower:]]
2、显示/etc目录下以任意一位数字开头,且以非数字结尾的文件或目录
ls -d /etc/[0-9]*[^0-9]
3、显示/etc/目录下以非字母开头,后面跟了一个字母及其它任意长度任意字符
的文件或目录
ls -d /etc/[^[:alpha:]][[:alpha:]]*
4、显示/etc/目录下所有以rc开头,并后面是0-6之间的数字,其它为任意字符
的文件或目录
ls -d /etc/rc[0-6]*
5、显示/etc目录下,所有以.d结尾的文件或目录
ls -d /etc/*.d
6、显示/etc目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录
ls -d /etc/[mnrp]*.conf
7、只显示/root下的隐藏文件和目录
ls -d /root/.*
ls -aI "[^.]*" 当前目录为/root
l. ls -d .* --color=auto 当前目录为/root
8、只显示/etc下的非隐藏目录
ls -d /etc/*/
㈦ linux系统中ls命令是什么意思
ls命令是linux下最常用的命令之一,ls跟dos下的dir命令是一样的都是用来列出目录下的文件。x0dx0a1. ls -a 列出文件下所有的文件,包括以“.“开头的隐藏文件(linux下文件隐藏文件是以.开头的,如果存在..代表存在着父目录)。x0dx0a2. ls -l 列出文件的详细信息,如创建者,创建时间,文件的读写权限列表等等。x0dx0a3. ls -F 在每一个文件的末尾加上一个字符说明该文件的类型。"@"表示符号链接、"|"表示FIFOS、"/"表示目录、"="表示套接字。x0dx0a4. ls -s 在每个文件的后面打印出文件的大小。 size(大小)x0dx0a5. ls -t 按时间进行文件的排序 Time(时间)x0dx0a6. ls -A 列出除了"."和".."以外的文件。x0dx0a7. ls -R 将目录下所有的子目录的文件都列出来,相当于我们编程中的“递归”实现x0dx0a8. ls -L 列出文件的链接名。Link(链接)x0dx0a9. ls -S 以文件的大小进行排序
㈧ linux查看文件时间
通过你的描述,查看文件时间命令如下:
[root@Backup2 ~]# ll --full-time
total 20
-rw-r--r-- 1 root root 275 2020-07-28 03:13:57.332661556 +0800 1
-rw-r--r-- 1 root root 9359 2020-11-18 08:14:44.765247613 +0800 106.txt
-rw-------. 1 root root 1188 2020-07-27 17:47:59.535241829 +0800 anaconda-ks.cfg
[root@Backup2 ~]#
温馨提示:
ll 命令为 ls -l 的别名
命令为:
[root@Backup2 ~]# alias ll='ls -l'
[root@Backup2 ~]#
或者
[root@Backup2 ~]# alias ll='ls -l --full-time '
[root@Backup2 ~]#
[root@Backup2 ~]# ll
total 20
-rw-r--r-- 1 root root 275 2020-07-28 03:13:57.332661556 +0800 1
-rw-r--r-- 1 root root 9359 2020-11-18 08:14:44.765247613 +0800 106.txt
-rw-------. 1 root root 1188 2020-07-27 17:47:59.535241829 +0800 anaconda-ks.cfg
[root@Backup2 ~]#
以上就是关于linux 查看文件时间的命令,由于系统环境不同,可能会有出入,如有问题可以关注+私信,我会第一时间回复,希望我的回答能对你有所帮助。。。。。。
㈨ 如何学习linux命令之ls的使用
1 输入 ls -a 或 ls -A
-a:显示所有文件及目录(ls内定将档案名或目录名称为“.”的视为隐藏,不会列出);
-A:显示除隐藏文件“.”和“..”以外的所有文件列表;
2 输入 ls -C 或 ls -F
-C:多列显示输出结果。这是默认选项; -l:与“-C”选项功能相反,所有输出信息用单列格式输出,不输出为多列;
-F:在每个输出项后追加文件的类型标识符,具体含义:“*”表示具有可执行权限的普通文件,“/”表示目录,“@”表示符号链接,“|”表示命令管道FIFO,“=”表示sockets套接字。当文件为普通文件时,不输出任何标识符;
3 输入 ls -b 或 ls -d
-b:将文件中的不可输出的字符以反斜线“”加字符编码的方式输出; -c:与“-lt”选项连用时,按照文件状态时间排序输出目录内容,排序的依据是文件的索引节点中的ctime字段。与“-l”选项连用时,则排序的一句是文件的状态改变时间;
-d:仅显示目录名,而不显示目录下的内容列表。显示符号链接文件本身,而不显示其所指向的目录列表;
4 输入 ls -f 或 ls -i
-f:此参数的效果和同时指定“aU”参数相同,并关闭“lst”参数的效果;
-i:显示文件索引节点号(inode)。一个索引节点代表一个文件; --file-type:与“-F”选项的功能相同,但是不显示“*”;
5 输入 ls -k 或 ls -l 或 ls -m
-k:以KB(千字节)为单位显示文件大小;
-l:以长格式显示目录下的内容列表。输出的信息从左到右依次包括文件名,文件类型、权限模式、硬连接数、所有者、组、文件大小和文件的最后修改时间等;
-m:用“,”号区隔每个文件和目录的名称;
6 输入 ls -n 或 ls -r
-n:以用户识别码和群组识别码替代其名称;
-r:以文件名反序排列并输出目录内容列表;
7 输入 ls -s 或 ls -t 或 ls -t --full-time:列出完整的日期与时间
-s:显示文件和目录的大小,以区块为单位;
-t:用文件和目录的更改时间排序;
8 输入 ls -L 或 ls -R
-L:如果遇到性质为符号链接的文件或目录,直接列出该链接所指向的原始文件或目录;
-R:递归处理,将指定目录下的所有文件及子目录一并处理;